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

标签 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 中的每个记录都有 data[i].nodeData.id = 0,那么最后我希望 dropAboveData 包含所有 id 为 -1 的内容,而 dropBelowData 包含所有 id 为 -2 的内容。

但是看起来 data、dropAboveData 和 dropBelowData 都变成了用 -2 填充的数组。

为什么会发生这种情况?我虽然 slice() 制作了数组的副本,这样我就不会访问同一个对象?

最佳答案

Slice进行浅复制

The slice() method returns a shallow copy of a portion of an array into a new array object selected from begin to end (end not included). The original array will not be modified.

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

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)

关于Javascript - 在 while 循环中修改两个数组,两个数组都保留第二个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51458492/

相关文章:

javascript - JavaScript中的Unicode和URI编码、解码和转义

计算 c 中哈希集中的簇

java - 在二维数组中生成随机数

javascript - 使用 jquery .html() 获取元素本身的 html

javascript - Ember - 将数据从服务器检索到 View ?

javascript - 运行 for 循环。增加值;退出并使用新值再次开始循环

c - 通过 N 个输入查找 C 中最大的数字

javascript - 在 cshtml 中的迭代表上设置 ng-bind-html

javascript - 将嵌套对象与 JavaScript 中的数组进行比较并返回键相等

c# - 在方法中显示数组