gorwhoami
@gorwhoami

Как работает этот код?

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); 

alert( arr ); // [3, 1]
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
function filterRangeInPlace(arr, a, b) {

  for (let i = 0; i < arr.length; i++) {
    let val = arr[i];

    if (val < a || val > b) {
      // Удалить элемент из массива, если он меньше а или больше b
      arr.splice(i, 1);
      i--; // Уменьшить итератор, т.к. перед этим удалили элемент, тем самым сократили массив на 1 элемент
    }
  }

}

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

filterRangeInPlace(arr, 1, 4); 

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


SagePtr уже дал наводку на верный ответ
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
SagePtr
@SagePtr
Еда - это святое
Криво работает и неоптимально. Весь этот код можно было заменить на вызов одной функции filter
Ответ написан
@applecode
arr.splice(i, 1); -> удалил элемент из массива
i-- -> декримируешь после удаление потому что, массив уменьшился в длине.
Без него в val попал был элемент через один, а не следующий
Ответ написан
Комментировать
@4aeBap
Просто смотрю задачки :)
1 строка - функция с значениям arr, a , b;
2 строка - цикл который считывает с массива arr числа 5, 3, 8, 1;
3 строка - присваивает переменной val значение arr[i];
4 строка - если переменная val меньше a или больше b ;
5 строка - удаляет i значений по индексу 1
( https://developer.mozilla.org/ru/docs/Web/JavaScri... );
6 строка - уменьшает i на 1 раз;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект