function filterRangeInPlace(arr, a, b) {
for (let i = 0; i < arr.length; i++) {
let val = arr[i];
// удалить, если за пределами интервала
if (val < a || val > b) {
arr.splice(i, 1);
i--;
}
}
}
let arr = [5, 3, 8, 1];
filterRangeInPlace(arr, 1, 4); // удалены числа вне диапазона 1..4
alert( arr ); // [3, 1]
const numbers = [1, 2, 4, 8];
. Мы проходим по нему циклом for
, при этом заранее не сохраняя длину массива, таким образом, если удалять в цикле каждый раз текущий индекс, то при следующей итерации будет пересчитано условие i < arr.length
, но 1 элемент то мы удалили, и следовательно цикл завершится раньше. Чтобы этого не произошло, i
уменьшают на 1. В тот момент, когда удаляется элемент, i
при следующей итерации «остается на месте».