Chyba při změně prvku pole v JavaScriptu
Pojďme se podívat na chybu, která vzniká při nesprávné změně prvku pole. Předpokládejme, že máme následující pole:
let arr = [1, 2, 3, 4, 5];
Předpokládejme také, že máme funkci, která přijímá číslo jako parametr a vrací druhou mocninu tohoto čísla:
function func(num) {
return num ** 2;
}
Zkusme pomocí cyklu for-of
projít naše pole a na každý
z jeho prvků aplikovat naši funkci:
for (let elem of arr) {
elem = func(elem);
}
Na tomto místě začátečníci často dělají
chybu. Problém je v tom, že změna proměnné
elem nevede ke změně prvku
v samotném poli. Přesvědčme se o tom:
console.log(arr); // pole se nezměnilo
Pole se nemění proto,
že proměnná elem obsahuje
kopii prvku, ne odkaz na něj.
Změna elem ovlivní kopii,
ale ne samotné pole.
K vyřešení problému je potřeba měnit přímo prvky pole:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // nyní se pole změnilo