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); // энди массив ўзгарди