Greška pri izmeni elementa niza u JavaScript-u
Hajde da razmotrimo grešku koja se javlja pri nepravilnoj izmeni elementa niza. Pretpostavimo da imamo sledeći niz:
let arr = [1, 2, 3, 4, 5];
Pretpostavimo da takođe imamo funkciju koja prima broj kao parametar i vraća kvadrat tog broja:
function func(num) {
return num ** 2;
}
Hajde da pomoću petlje for-of
prođemo kroz naš niz i na svaki
od njegovih elemenata primenimo našu funkciju:
for (let elem of arr) {
elem = func(elem);
}
Na ovom mestu početnici često prave
grešku. Stvar je u tome što promena promenljive
elem ne dovodi do promene elementa
u samom nizu. Uverimo se u ovo:
console.log(arr); // niz se nije promenio
Niz se ne menja zbog toga
što u promenljivoj elem se čuva
kopija elementa, a ne referenca na njega.
Promena elem utiče na kopiju,
ali ne i na sam niz.
Za rešavanje problema je potrebno menjati upravo elemente niza:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // sada se niz promenio