我有一个复杂的变量作为一个对象,包括相同对象的2倍。 如果更改第一对象部分的值,则将假定更改第二部分的值。有解释吗?为何仍然连接拖车键?! 这是我的代码的一个简单示例:
arr1={'a':[],'b':{'b1':'','b2':''}};
arr2={'p1':{...arr1},'p2':{...arr1}};
arr2['p1']['a']=[1,2,3];
console.log(arr2['p2']['a']); // works => []
arr2['p1']['b']['b1']='blabla';
console.log(arr2['p2']['b']['b1']); // doesn't work => 'blabla'
我不想写'B = {'b1':{'a':''},'b2':{'a':''}}'',因为A在a中是一个很大的对象分隔的.js文件
答案 0 :(得分:0)
散布运算符的基本思想是使用现有对象的自身属性创建一个新的普通对象。因此{... obj}创建一个具有与obj相同的属性和值的新对象
您可以轻松地做到
A={'a':''};
B={'b1':{...A},'b2':{...A}};
B['b1']['a']='blabla';
console.log(B['b2']); // => '' not 'blabla'
答案 1 :(得分:0)
A={'a':''};
B={'b1':A,'b2':A};
B['b1']['a']='blabla';
主要原因是您尝试通过其索引a
更改对象元素,而不是更改对象(引用)。
B['bi']
对象A
A['a']
设置为blabla
B['b1']
和B['b2']
指向A
A
的相同实例但是,如果您执行B['b1'] = { 'a': 'blabla' }
,则不会得到相同的结果。因为现在您要添加一个与A
没有任何连接的新实例。
答案 2 :(得分:0)
我用以下方法解决了这个问题:
arr2={'p1':JSON.parse(JSON.stringify(arr1)),'p2':JSON.parse(JSON.stringify(arr1))};