@sashadobrota

Функция фильтрации массива в диапазоне?

Есть вот такая функция фильтрации массива в диапазоне.

myArr = [5, 3, 8, 1, 12, 4, 5, 6, 1, 54, 7];

function filterRangeInPlace(arr, min, max) {
	for (var i = 0; i < arr.length; i += 1) {
			if (arr[i] < min || arr[i] > max) {
					arr.splice(i--, 1);
			}
	}
}

filterRangeInPlace(myArr, 2, 5); //[5, 3, 4, 5]


Вопрос: почему arr.splice(i--, 1)? Зачем i-- ? Не могу сообразить, спасибо.
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
i-- затем, чтобы, удалив только что какой-то элемент вне диапазона, «текущий» элемент указывал на следующий.

Например, i=2, текущий элемент arr[2] это 8, вне диапазона. arr.splice(2,1) удалит этот элемент. Теперь на месте arr[2] оказывается уже 1.

Если не сделать i--, следующее значение i в итерации цикла будет уже 3, а arr[3] это 12 – выходит, "1" пропустили и даже не рассматривали.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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