Klaida keičiant masyvo elementą JavaScript
Panagrinėkime klaidą, kylančią netinkamai keičiant masyvo elementą. Tarkime, kad turime tokį masyvą:
let arr = [1, 2, 3, 4, 5];
Tarkime, kad taip pat turime funkciją, kuri parametru priima skaičių ir grąžina to skaičiaus kvadratą:
function func(num) {
return num ** 2;
}
Naudodami ciklą for-of
pereikime per mūsų masyvą ir kiekvienam
jo elementui pritaikykime mūsų funkciją:
for (let elem of arr) {
elem = func(elem);
}
Šioje vietoje pradedantieji dažnai daro
klaidą. Esmė ta, kad kintamojo
elem keitimas nesukelia elemento
pakeitimo pačiame masyve. Įsitikinkime tuo:
console.log(arr); // masyvas nepakito
Masyvas nekeičiamas dėl to,
kad kintamajame elem saugoma
elemento kopija, o ne nuoroda į jį.
elem keitimas veikia kopiją,
bet ne patį masyvą.
Norint išspręsti problemą, reikia keisti būtent masyvo elementus:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // dabar masyvas pasikeitė