@Sasha27

Почему в методе splice(i--, 1) переменную уменьшают на 1?

На сайте lern.javascript.ru есть задача: "Создайте функцию filterRangeInPlace(arr, a, b), которая получает массив с числами arr и удаляет из него все числа вне диапазона a..b."

Вот код решения:

function filterRangeInPlace(arr, a, b) {

  for (var i = 0; i < arr.length; i++) {
    var val = arr[i];
    if (val < a || val > b) {
      arr.splice(i--, 1);
    }
  }

}

var arr = [5, 3, 8, 1];

filterRangeInPlace(arr, 1, 4);
alert( arr ); // [3, 1]


Так все понятно, кроме одного почему переменную i в строке arr.splice(i--, 1); уменьшают на один. Ведь нам по факту нужно убрать с позиции i 1 символ? Можете объяснить как это работает?
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
@timokins
Если условие выполняется, то из массива удалится один элемент, оставшиеся часть сдвинется.
При следующей итерации i увеличится на один, но нам это не нужно, нам нужно еще раз прочитать тот же самый индекс, т.к. он имеет новое (сдвинутое) значение. Поэтому мы отнимаем единицу, чтобы индекс остался тем же самым в следующей итерации.

upd: i-- уменьшит значение после того, как передаст его в функцию. Т.е. в функцию передалось значение i, а после уменьшится на единицу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sasha27 Автор вопроса
Спасибо.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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