WhiteBachelor
@WhiteBachelor
Начинающий веб-программист.

Почему действия в цикле работают через раз?

Есть небольшая программка, и она работает вполне неплохо, кроме функции удаления элементов. Она удаляет не все выбранные элементы, а через один. То есть, если есть элементы 0, 1, 2, 3, 4, то останутся 1 и 3. судя по всему, проблема в условиях цикла, но какая? Сам в упор не вижу. Может подскажете?
function deleteArray(){
    let k = 0;
    for( i = 0; i <= arrayList.length; i++ ){
        if (document.getElementById(arrayListId[i]).className == 'del'){
            document.getElementById(arrayListId[i]).remove();
            arrayList.splice(i, 1)
            arrayListId.splice(i, 1)
            k++;
        }
    }
    if (k == 0){
            alert('Ничего не выбрано!!!\nВыберите элемент, нажав на него.')
        }
}
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Потому что вы удаляете элементы из перебираемого массива.
Например:
Массив [a, b, c, d]
Цикл 0: (i==0) удалить element[a], удалить a. В итоге массив [b, c, d]. Увеличить i на 1.
Цикл 1: (i==1) i указывает на c. Удалить element[c], удалить c. В итоге массив [b, d]. i++
Цикл 2: не выполняется, т.к. i >= length
Итог: b и d мы просто пропустили.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы