在下面的代码中,我创建对象的数组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))。谢谢!