使用array.map()映射到另一个类

时间:2018-07-17 12:45:27

标签: javascript arrays ecmascript-6 stream

考虑以下代码:

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 *版本对数组数据进行了简单的操作,

2 个答案:

答案 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));