我有以下代码
seriesTitles = ['depth','incline']
var aSeries = {name: '',data: [{}]}
var seriesArray = []
seriesTitles.forEach(element => { // outer loop}
aSeries.name = element;
seriesArray.push(aSeries)
})
console.log(seriesArray)
字符串
但有些地方不对劲。它似乎将seriesTitles数组中的最后一项添加了两次!我得到的输出是。
{"name": "incline","data": [{}]}
{"name": "incline","data": [{}]}
型
当我运行代码时,我希望看到..
{"name": "depth","data": [{}]}
{"name": "incline","data": [{}]}
型
我是JavaScript的新手,被这个抛了出来。有没有人能指出我哪里做错了?
3条答案
按热度按时间wrrgggsh1#
这是因为,JavaScript中的对象文字是引用变量,并且您正在将完全相同的对象推送到数组中。所以,这就像多次推送对象的相同地址。所以,每当你在某个地方做任何改变,整个数组似乎都改变了,因为所有的对象都是一样的。你可以在这里阅读更多https://academind.com/tutorials/reference-vs-primitive-values
您可以创建对象的副本,然后更改属性,再将其推送到数组。您可以使用解构来制作副本。
字符串
djmepvbi2#
下面是工作示例:
字符串
wfveoks03#
您添加了
aSeries
两次,并且碰巧修改了name
。如果您想要不同的aSeries
对象,那么可以创建一个副本,或者更改范围并在forEach内部创建它。您可以使用展开运算符创建副本:
字符串
或者只是将
aSeries
变量的声明移到for循环中,这样每次都示例化一个新的变量。型