Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отметить чекбоксы (https://javascript.ru/forum/misc/39609-otmetit-chekboksy.html)

laimas 10.07.2020 07:43

voraa, ну вот, думал он подумает и что-то сделает, дабы понять, что решений может быть не одно, а тут бах и выложили готовое. :)

voraa 10.07.2020 07:54

Просто буквально в прошлом месяце делал похожее с массивами.
Столько то элементов обработать одним способом, потом столько то другим, потом опять сколько то первым и т.д.

laimas 10.07.2020 08:06

Цитата:

Сообщение от voraa
буквально в прошлом месяце делал похожее с массивами

Ну и не сложно же было? Основа этого решения простая же, нужно только чуток извилинами пошевелить и вспомнить школу, свой опыт он полезнее любой подсказки. :)

рони 10.07.2020 10:32

:) :write:
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>checks</title>
</head>
<body>
<div id="block">
</div>
</body>
<script>
// Тут просто генерируем 50 чекбоксов
let s = '';
let n = 50;
for (let i=0; i<n; i++) s+=`${i}: <input type='checkbox' name='check'><br>`;
document.getElementById('block').innerHTML = s;
</script>

<script>
(function () {
    const checkbox = document.querySelectorAll("INPUT[type=checkbox]");
    const length = checkbox.length;
// 10 отметить, 20 пропустить, 10 отметить, 7 пропустить, 2 отметить
    let chsk = [10, 20, 10, 7, 2];
    let n = chsk.shift();
    for (let i = 0; i < length; ) {
    if(n--) checkbox[i++].checked = true;
    else if(chsk.length > 1){
    i += chsk.shift();
    n = chsk.shift();
    }
    else break;
    }
})();
</script>
</html>

laimas 10.07.2020 11:11

Что-то слишком наворочено. :)

<script>
var A = Array.from(Array(50), (x=1, i) => x+i), 
    L = 5,
    B = [];

for(var i=0, k=L*L; i<k; ++i) {
    B.push(A[Math.trunc(i/L)*L+i])
}

document.write(A+'\n'+B)
</script>

laimas 10.07.2020 11:17

рони, это пример в смысле для произвольных пропусков? Тогда наверное один раз реверс chsk, чтобы не перетряхивать постоянно массив chsk?

рони 10.07.2020 11:24

Цитата:

Сообщение от laimas
это пример в смысле для произвольных пропусков?

это пример последовательной обработки только нужных блоков, использовать shift() конечно не оптимально, лучше через индекс, тут основной выигрыш в том что остальные элементы не затрагиваются, и for один из быстрых методов.

laimas 10.07.2020 11:27

Цитата:

Сообщение от рони
использовать shift() конечно не оптимально

Но ведь можно pop(), он просто будет урезать массив не перестраивая его.

рони 10.07.2020 11:29

Цитата:

Сообщение от laimas
Тогда наверное один раз реверс chsk,

Цитата:

Сообщение от laimas
ведь можно pop(),

так понятнее, ок, да можно и так.

laimas 10.07.2020 11:40

<script>
var A = Array.from(Array(50), (x=1, i) => x+i), 
    L = 5,
    B = [];

for(var i=0; i<A.length; ++i) {
    if(Math.trunc(i/L)&1) continue;
    B.push(A[i])
}

document.write(B)
</script>


Часовой пояс GMT +3, время: 15:25.