Javascript:forEach函数更改数据

时间:2018-07-28 20:00:21

标签: javascript arrays foreach javascript-objects

免责声明:我不知道我对此问题的正确标题是什么,因此欢迎任何编辑。

我有一个对象数组。对于每个对象,我想更改一个属性的值。使用{{user.person.id}}函数更改值后,初始数据也更改了,这不是我想要的。 我已附上pen,以便您更好地理解。

请问一下,并解释为什么JS具有这种行为吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

数组中的对象通过引用传递-意味着它们在forEach函数中进行的任何更改也会改变“原始”对象。 您可以做的一个例子是: result = Object.assign({}, element); 代替result = element; Object.assign将创建该对象的新副本,您将不会更改原始数组。

MDN for Object.assign

编辑:

换句话说,当您遍历对象数组时,JavaScript不会创建新对象。因此,在进行迭代时,elementcurrencyRates数组中的对象相同。当分配result = element时,结果也是同一对象。两者都指向相同的数组,只是名称不同。因此,当您修改result就像修改element或直接在数组中修改-即currencyRates[0][nameOfTheDateKey] = newValue时。 使用Object.assign时,JS会在结果中创建element的新副本,并且不再是同一对象,因此对其进行操作不会影响element,也不会影响您的原始数组。 希望它已清除并且现在更有意义。