Javascript:forEach函数更改数据

Javascript:forEach函数更改数据,javascript,arrays,foreach,javascript-objects,Javascript,Arrays,Foreach,Javascript Objects,免责声明:我不知道这个问题的正确标题是什么,所以欢迎任何编辑 我有一个对象数组。对于每个对象,我希望更改一个属性的值。使用forEach()函数更改值后,初始数据也会更改,这不是我想要的。 我附上了一封信,以便你能更好地理解 你能看一下并解释一下为什么JS会有这种行为吗 谢谢大家! 数组中的对象是通过引用传递的,这意味着它们在forEach函数中所经历的任何更改都将同时改变“原始”对象。 您可以做的一个例子是: result=Object.assign({},元素) 而不是result=elem

免责声明:我不知道这个问题的正确标题是什么,所以欢迎任何编辑

我有一个对象数组。对于每个对象,我希望更改一个属性的值。使用
forEach()
函数更改值后,初始数据也会更改,这不是我想要的。 我附上了一封信,以便你能更好地理解

你能看一下并解释一下为什么JS会有这种行为吗


谢谢大家!

数组中的对象是通过引用传递的,这意味着它们在
forEach
函数中所经历的任何更改都将同时改变“原始”对象。 您可以做的一个例子是:
result=Object.assign({},元素)
而不是
result=element
Object.assign
将创建该对象的新副本,并且您不会更改原始数组

编辑:

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

请在问题中添加所有相关信息。也请看一下这里:可能重复:老实说,我不太明白为什么我会有这种行为,但它还是起了作用。“如果你有更多时间用更简单的术语解释,那就太棒了。”丹尼尔补充了一个额外的解释,希望它能帮助你更好地理解它。是的,现在它更有意义了。非常感谢你!