作者d13751200344 (三更灯火五更鸡)
看板Ajax
标题[问题] 代码执行问题
时间Fri Mar 25 22:35:33 2022
各位版上的前辈高手们好:)
想请教各位,如果我想要把 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) 一样呢??
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.205.120.144 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1648218938.A.A40.html
※ 编辑: d13751200344 (123.205.120.144 台湾), 03/25/2022 22:37:34
1F:→ gasbomb: 你自己把他改掉了啊 03/26 00:13
2F:→ gasbomb: array就是A 03/26 00:14
3F:推 VdustR: array 就是 A, 你第二个范例改成 forEach 然後 return 拿 03/26 15:08
4F:→ VdustR: 掉也可以跑 03/26 15:08
5F:→ d13751200344: 谢谢楼上两位的回答;不过我还是不懂为什麽两组代码 03/26 21:25
6F:→ d13751200344: 的AB呈现不同的结果@@? 03/26 21:25
7F:推 VdustR: 主要是你对那个 array 做了异动, return array[index] * 2 03/26 21:36
8F:→ VdustR: 就不会变了 03/26 21:36