@Roman123987

Почему цикл пропускает элемент массива?

var str = '   ';
var str_1 = str.split('');
console.log(str_1); //вывожу элементы получившегося массива(3 пробела)
for(var i = 0; i<str_1.length; i++){
  if(str_1[i] == ' '){
    str_1.splice(i, 1);

  }
}
console.log(str_1); //выводится 1 пробел...


В итоге выводит:
[ ' ' , ' ' , ' ' ]
[ ' ' ]
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Ну, так вы удаляете элемент с массива, не изменяя i. Например, был массив
arr = [1,2,3]
вы удалили нулевой элемент
[2, 3]
и теперь переходите на следующую итерацию, где i=1, а значит, берете тройку, пропуская двойку.
Можно решить так
var str = '   ';
var str_1 = str.split('');
console.log(str_1); //вывожу элементы получившегося массива(3 пробела)
for(var i = 0; i<str_1.length; i++){
  if(str_1[i] == ' '){
    str_1.splice(i, 1);
    i--;
  }
}
console.log(str_1); //выводится 1 пробел...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
пробегайте не от начала к концу а от конца к началу и все будет нормально. Почему - вам уже объяснили.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы