Kosa la Kubadilisha Kipengele cha Safu katika JavaScript
Wacha tuzingatie kosa linalotokea wakati wa kubadilisha kipengele cha safu visivyyo. Hebu tuwe na safu kama hii:
let arr = [1, 2, 3, 4, 5];
Hebu tuwe pia na kitendakazi kinachokubali nambari kigezo na kurudisha mraba wa nambari hiyo:
function func(num) {
return num ** 2;
}
Wacha tutumie kitanzi for-of
kuzunguka safu yetu na kutumia kitendakazi chetu
kwa kila kipengele chake:
for (let elem of arr) {
elem = func(elem);
}
Hapa ndio wanaoanza mara nyingi hufanya
kosa. Jambo ni kwamba kubadilisha kitofautishi
elem hakileti mabadiliko kwenye kipengele
katika safu yenyewe. Hebu tuhakikishe hili:
console.log(arr); // safu haijabadilika
Safu haibadilika kwa sababu
katika kitofautishi elem imehifadhiwa
nakala ya kipengele, si kiungo kwake.
Kubadilisha elem huathiri nakala,
lakini si safu yenyewe.
Ili kutatua tatizo inahitajika kubadilisha vipekee vya safu yenyewe:
for (let i = 0; i < arr.length; i++) {
arr[i] = func(arr[i]);
}
console.log(arr); // sasa safu imebadilika