如何复制Javascript中的对象数组?

时间:2019-05-22 20:54:37

标签: javascript arrays

在下面的代码中,我创建对象的数组a,每个对象都有一个属性b,该属性已初始化为0。我将a复制到c中,散布运算符,希望我能够在不影响c的情况下操纵a。但是,会发生以下情况:

let a = [
    {
        b: 0
    },
    {
        b: 0
    },
    {
        b: 0
    },
]
let c = [...a]
c[0].b = 1
console.log(a) // a gets modified when I modify c

我理解为什么会这样:由于a的元素是对象,因此在创建c时会复制它们的引用,因此c的元素仍然引用了a

没有人知道的方式来解决这个问题?我想要的是一种在不修改a中相应对象的情况下复制a并操纵结果数组中对象的属性的方法。

谢谢!

可能的解决方案

我知道您可以执行JSON.parse(JSON.stringify(a)),但我想知道是否有一个更简单的解决方案:)

为什么这与Copy array by value

不同

Copy array by value文章询问有关复制原始数组的问题,解决方案是使用slice()或散布运算符。我在这里已经做到了,问题就不同了,如问题所述。

更新:解决方案

正如@talemyn所指出的,尽管Copy array by value是一个不同的问题,但对该问题的第二高投票回答是关于深度复制的详细信息,因此,看来此用例的最佳解决方案是JSON .parse(JSON.stringify(c))。谢谢!

0 个答案:

没有答案