Massiivi elemendi muutmise viga JavaScriptis
Vaatleme viga, mis tekib massiivi elemendi valesti muutmisel. Olgu meil antud selline massiiv:
let arr = [1, 2, 3, 4, 5];
Olgu meil ka funktsioon, mis parameetrina võtab arvu ja tagastab selle arvu ruudu:
function func(num) {
return num ** 2;
}
Kasutame tsüklit for-of,
et läbida meie massiiv ja rakendada
iga elemendile meie funktsiooni:
for (let elem of arr) {
elem = func(elem);
}
Siin kohas teevad algajad sageli
vea. Asi on selles, et muutuja
elem muutmine ei too kaasa elemendi
muutumist massiivis endas. Veendume selles:
console.log(arr); // massiiv ei muutunud
Massiiv ei muutu seetõttu,
et muutujas elem hoitakse
elemendi koopiat, mitte viidet sellele.
elem muutmine mõjutab koopiat,
kuid mitte massiivi ennast.
Probleemi lahendamiseks tuleb muuta just massiivi elemente:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // nüüd massiiv muutus