Памылка змены элемента масіва ў JavaScript
Давайце разгледзім памылку, якая ўзнікае пры няправільнай змене элемента масіва. Хай у нас дадзены вось такі масіў:
let arr = [1, 2, 3, 4, 5];
Хай у нас таксама ёсць функцыя, якая параметрам прымае лік і вяртае квадрат гэтага ліку:
function func(num) {
return num ** 2;
}
Давайце з дапамогай цыкла for-of
перабяром наш масіў і да кожнага
з яго элементаў прымянім нашу функцыю:
for (let elem of arr) {
elem = func(elem);
}
У гэтым месцы пачаткоўцы часта дапускаюць
памылку. Справа ў тым, што змена зменнай
elem не прыводзіць да змены элемента
ў самім масіве. Пераканаемся ў гэтым:
console.log(arr); // масіў не змяніўся
Масіў не змяняецца з-за таго,
што ў зменнай elem захоўваецца
копія элемента, а не спасылка на яго.
Змена elem ўплывае на копію,
але не на сам масіў.
Для вырашэння праблемы трэба мяняць менавіта элементы масіва:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // цяпер масіў змяніўся