@Anvario0

Почему массив сохранил старое значение?

Задание:
Напишите функцию filterRangeInPlace(arr, a, b), которая принимает массив arr и удаляет из него все значения кроме тех, которые находятся между a и b. То есть, проверка имеет вид a ≤ arr[i] ≤ b.

Функция должна изменять принимаемый массив и ничего не возвращать.

Например:
let arr = [5, 3, 8, 1];

filterRangeInPlace(arr, 1, 4); // удалены числа вне диапазона 1..4

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

Мой код:
function filterRangeInPlace(arr, a, b) {
	arr = arr.filter(function(item) {
		if (item >= a && item <= b) return true;
		else return false;
	});

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

filterRangeInPlace(arr, 1, 4); 

alert( arr ); //5, 3, 8, 1
}

Я знаю, что аргументы в функцию передаются по значению, но массивы ведь передаются по ссылке, так? Тогда почему массив не меняется?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Да, массивы (и другие объекты) передаются по ссылке. Вам в функцию пришла ссылка на массив, доступная через локальную переменную (параметр) arr. Вы переписали значение переменнной. При этом изначальное значение массива осталось по исходной ссылке, которую вы внутри функции уже не видите.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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