Почему массив не изменяется?

226
08 декабря 2021, 17:00

Да, то, что я хочу, можно реализовать через return в функции, но меня волнует мой вопрос.

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

function filterRange(arr, start, end) {
  arr = arr.filter(item => (item >= start && item <= end));
}
let arr = [5, 3, 8, 1];
let filtered = filterRange(arr, 1, 4);
alert( filtered ); // 5, 3, 8, 1    
alert( arr );      // 5, 3, 8, 1
Answer 1

function filterRange(arr, start, end) { 
  // т.к. ссылка на объект является значением, ф-ция получает копию этой ссылки 
  arr = arr.filter(item => (item >= start && item <= end)); 
  // arr = ... - меняет копию ссылки, из-за этого изменения и не видны снаружи; 
  // в данном случае ссылке arr присваивается новый массив - 
  // arr.filter(item => (item >= start && item <= end)); 
} 
 
let arr = [5, 3, 8, 1]; // arr - ссылка на место в памяти где лежит массив [5, 3, 8, 1]; 
 
let filtered = filterRange(arr, 1, 4); // ссылка передается аргументом в функцию; 
 
alert( filtered ); // 5, 3, 8, 1     
alert( arr );      // 5, 3, 8, 1

Дело в следующем... Аргументы ф-ции передаются по значению и ф-ция принимает только копию этого значения, а в JavaScript-е ссылки на объекты являются значениями. Т.е. в данном случае, ты перезаписываешь копию ссылки аргумента(массива), из-за этого изменения не видны снаружи. Но если ты изменишь сам объект,а не ссылку (например arr.push(20)), то внешний массив изменится.

Answer 2
function filterRange(arr, start, end) {
  return arr.filter(item => (item >= start && item <= end));
}
READ ALSO
JS Получить все значения value в массив

JS Получить все значения value в массив

Подскажите, пожалуйста как собрать все значения value в массив,для последующей работы с нимВот пробую написать

160
Как мне использоваться переменную из одного метода в другом

Как мне использоваться переменную из одного метода в другом

Задание "Описать класс, представляющий треугольникПредусмотреть методы для создания объектов, вычисления площади, периметра и точки пересечения...

122
Изменение цвета шапки меню при прокрутке к блоку с таким же цветом

Изменение цвета шапки меню при прокрутке к блоку с таким же цветом

Есть страница с блоками разных цветовЕсть меню, по клику на пункт которого, происходит прокрутка к соответствующему блоку

229
Упростить Promise Javascript

Упростить Promise Javascript

Есть код, он рабочийЯ новичок в промисах, можно ли как-то упростить его? Знаю, что сделал неправильно, второй промис можно как-то вынести отдельно

78