[問題] 代碼執行問題

作者: d13751200344 (callmedan)   2022-03-25 22:35:33
各位版上的前輩高手們好:)
想請教各位,如果我想要把 Array 中的值乘以2,則代碼:
let A = [9000, 8500, 5500, 6500];
let B = A.map(function (value, index, array){
return value*2;
});
console.log(A)
// [9000, 8500, 5500, 6500] - 原陣列不會被修改
console.log(B)
// [18000, 17000, 11000, 13000] — X2的結果,新的陣列
第一組完全是預期中對結果,但如果改成下方:
let A = [9000, 8500, 5500, 6500];
let B = A.map(function (value, index, array){
return array[index] = value*2
});
console.log(A)
// [18000, 17000, 11000, 13000] - 原陣列竟然改變了?!
console.log(B)
// [18000, 17000, 11000, 13000] - 正常
請問為何第二組代碼的 console.log(A) 結果與 console.log(B) 一樣呢??
作者: gasbomb (虛空雷神獸)   2022-03-26 00:13:00
你自己把他改掉了啊array就是A
作者: VdustR (京)   2022-03-26 15:08:00
array 就是 A, 你第二個範例改成 forEach 然後 return 拿掉也可以跑
作者: d13751200344 (callmedan)   2022-03-26 21:25:00
謝謝樓上兩位的回答;不過我還是不懂為什麼兩組代碼的AB呈現不同的結果@@?
作者: VdustR (京)   2022-03-26 21:36:00
主要是你對那個 array 做了異動, return array[index] * 2就不會變了

Links booklink

Contact Us: admin [ a t ] ucptt.com