考虑以下代码:
class myClass {
constructor(obj) {
this.content = "mapped to myClass";
}
}
array = [{content:"first"},{content:"second"}];
array.map(o=> {o_mapped = new myClass(); return o_mapped} ); //1*
console.log(JSON.stringify(array));
array = array.map(o=> {o_mapped = new myClass(); return o_mapped} ); //2*
console.log(JSON.stringify(array));
我有此输出,我不知道为什么2 *不能像1 *一样工作
[{"content":"first"},{"content":"second"}]
[{"content":"mapped to myClass"},{"content":"mapped to myClass"}]
为什么会这样?我已经使用1 *版本对数组数据进行了简单的操作,
答案 0 :(得分:1)
map
返回新数组,它不操纵原始数组。
* 2之所以有效,是因为您重新分配了array
,然后打印了新数组。
如果您使用map
只是为了迭代并执行副作用,就像使用forEach
时那样,那么就不需要重新分配数组。
答案 1 :(得分:0)
地图总是返回新数组
在这种情况下,您需要设置内容,然后通过地图功能对其进行迭代
array = [{content:"first"},{content:"second"}];
array.map(o=> {o_mapped = new myClass(); return o_mapped} ); //1*
console.log(JSON.stringify(array));
在这种情况下,您正在使用默认内容,然后通过map函数对其进行迭代
array = array.map(o=> {o_mapped = new myClass(); return o_mapped} ); //2*
console.log(JSON.stringify(array));