免责声明:我不知道我对此问题的正确标题是什么,因此欢迎任何编辑。
我有一个对象数组。对于每个对象,我想更改一个属性的值。使用{{user.person.id}}
函数更改值后,初始数据也更改了,这不是我想要的。
我已附上pen,以便您更好地理解。
请问一下,并解释为什么JS具有这种行为吗?
谢谢!
答案 0 :(得分:0)
数组中的对象通过引用传递-意味着它们在forEach
函数中进行的任何更改也会改变“原始”对象。
您可以做的一个例子是:
result = Object.assign({}, element);
代替result = element;
Object.assign
将创建该对象的新副本,您将不会更改原始数组。
编辑:
换句话说,当您遍历对象数组时,JavaScript不会创建新对象。因此,在进行迭代时,element
与currencyRates
数组中的对象相同。当分配result = element
时,结果也是同一对象。两者都指向相同的数组,只是名称不同。因此,当您修改result
就像修改element
或直接在数组中修改-即currencyRates[0][nameOfTheDateKey] = newValue
时。
使用Object.assign
时,JS会在结果中创建element
的新副本,并且不再是同一对象,因此对其进行操作不会影响element
,也不会影响您的原始数组。
希望它已清除并且现在更有意义。