Грешка при промяна на елемент от масив в JavaScript
Нека разгледаме грешката, която възниква при неправилна промяна на елемент от масив. Да предположим, че имаме следния масив:
let arr = [1, 2, 3, 4, 5];
Да предположим също, че имаме функция, която приема число като параметър и връща квадрата на това число:
function func(num) {
return num ** 2;
}
Нека с помощта на цикъл for-of
обходим нашия масив и приложим нашата функция към всеки
от неговите елементи:
for (let elem of arr) {
elem = func(elem);
}
На това място начинаещите често правят
грешка. Работата е там, че промяната на променливата
elem не води до промяна на елемента
в самия масив. Нека се уверим в това:
console.log(arr); // масивът не се е променил
Масивът не се променя, защото
в променливата elem се съхранява
копие на елемента, а не референция към него.
Промяната на elem влияе на копието,
но не и на самия масив.
За решаване на проблема трябва да се променят точно елементите на масива:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // сега масивът се е променил