Chyba pri zmene prvku poľa v JavaScripte
Poďme si rozobrať chybu, ktorá vzniká pri nesprávnej zmene prvku poľa. Majme takéto pole:
let arr = [1, 2, 3, 4, 5];
Majme tiež funkciu, ktorá ako parameter prijíma číslo a vráti druhú mocninu tohto čísla:
function func(num) {
return num ** 2;
}
Skúsme pomocou cyklu for-of
prejsť naše pole a na každý
z jeho prvkov aplikovať našu funkciu:
for (let elem of arr) {
elem = func(elem);
}
Na tomto mieste začiatočníci často robia
chybu. Problém je v tom, že zmena premennej
elem nevedie k zmene prvku
v samotnom poli. Presvedčme sa o tom:
console.log(arr); // pole sa nezmenilo
Pole sa nemení preto,
že v premennej elem je uložená
kópia prvku, nie referencia naň.
Zmena elem vplýva na kópiu,
ale nie na samotné pole.
Na vyriešenie problému je potrebné meniť priamo prvky poľa:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // teraz sa pole zmenilo