Javascript-在while循环中修改两个数组,两个数组都保留第二个值

时间:2018-07-21 17:25:35

标签: javascript arrays

我有一个数组数据,其中包含一个nodeData对象,该对象包含一个ID

我制作了2个数组副本:

    const dropAboveData = data.slice();
    const dropBelowData = data.slice();

然后我尝试以不同的方式修改两个复制数组的两个副本

    for(let i = 0; i<data.length; i++){
        dropAboveData[i].nodeData.id = -1;
        dropBelowData[i].nodeData.id = -2;
    }

因此,例如,如果数据中的每个记录的data [i] .nodeData.id = 0,则最后我希望dropAboveData包含所有-1的id,dropBelowData包含所有-2的id。

但是相反,似乎data,dropAboveData和dropBelowData都变成了由-2填充的数组。

为什么会这样?我虽然slice()会复制数组,以便不访问同一对象?

2 个答案:

答案 0 :(得分:1)

Slice进行浅拷贝

  

slice()方法返回数组一部分的浅表副本   放入从头到尾选择的新数组对象中(不包括结尾)。   原始数组将不会被修改。

您可以复制这样的对象数组:

var data = [{
  'a': '0'
}, {
  'b': '1'
}, {
  'c': '2'
}]
dropAboveData = []
dropBelowData = []

data.map(o => {
  dropAboveData.push(JSON.parse(JSON.stringify(o)));
  dropBelowData.push(JSON.parse(JSON.stringify(o)));
});

dropAboveData[0] = 1; //<-- modify only dropAboveData
dropAboveData[1].b = 99;//<-- modify only dropAboveData

console.log(dropAboveData)
console.log(dropBelowData)

答案 1 :(得分:0)

charieftl指出我没有复制数组中的对象(nodeData对象)。

    const dropAboveData = data.map(item => item.nodeData.id = -1);
    const dropBelowData = data.map(item => item.nodeData.id = -2);

是我想要的。