3 回答
TA贡献1831条经验 获得超10个赞
对象是通过引用分配的,因此您需要对对象进行深层复制,否则对一个对象所做的更改将不可避免地改变另一个对象。在您的示例中,您可以通过简单地定义一个新变量来保存您想要的数据来避免这种情况。
换句话说,而不是这些行:
var a = {x:1}
let b = {x:2}
let c = {x:3}
let d = {x:4}
let tab1 = []
a.y = 5
b.y = 10
c.y = 10
d.y = 10
let group1 = [a, c, d]
let group2 = [a, b, d]
你可以使用这些行:
let a = {x:1}
let b = {x:2}
let c = {x:3}
let d = {x:4}
let e = {x:5}
let f = {x:6}
let tab1 = []
a.y = 5
b.y = 10
c.y = 10
d.y = 5
e.y = 10
f.y = 10
let group1 = [a, b, c]
let group2 = [d, e, f]
然后你会看到行为如你所愿。我不确定你的代码的目的是什么,但我想你会知道从这里去哪里。
TA贡献1780条经验 获得超1个赞
group1andgroup2是引用相同对象的数组,使用JSON.parse()and进行复制JSON.stringify():
let group1 = JSON.parse(JSON.stringify([a, c, d]));
let group2 = JSON.parse(JSON.stringify([a, b, d]));
TA贡献1943条经验 获得超7个赞
我试图制作引用对象的深层副本,它可以工作
let group1 = [Object.assign({}, a), c, d]
let group2 = [Object.assign({}, a), b, d]
添加回答
举报