Почему нет копии объекта
- Тут arr не изменяется т.к. в функции параметр arr а значит будут создана локальная копия объекта который возвращается верно ?
function filterRange(arr, a, b) {
// добавлены скобки вокруг выражения для улучшения читабельности
return arr.filter(item => (a <= item && item <= b));
}
let arr = [5, 3, 8, 1];
let filtered = filterRange(arr, 1, 4);
console.log( filtered ); // 3,1 (совпадающие значения)
console.log( arr ); // 5,3,8,1 (без изменений)
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]
- Почему тогда здесь не работает так ?
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Массив передаётся в функцию по ссылке — то есть копия его не создаётся, параметр ссылается на тот же самый массив. В первом случае работает потому, что метод .filter() создаёт и возвращает копию, а не меняет сам массив. Во втором случае вы уже вмешиваетесь в сам массив в цикле.
Подробнее: https://learn.javascript.ru/object-reference