迭代数组并填充JSON数据

brvekthn  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(88)

我有以下代码

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的新手,被这个抛了出来。有没有人能指出我哪里做错了?

wrrgggsh

wrrgggsh1#

这是因为,JavaScript中的对象文字是引用变量,并且您正在将完全相同的对象推送到数组中。所以,这就像多次推送对象的相同地址。所以,每当你在某个地方做任何改变,整个数组似乎都改变了,因为所有的对象都是一样的。你可以在这里阅读更多https://academind.com/tutorials/reference-vs-primitive-values
您可以创建对象的副本,然后更改属性,再将其推送到数组。您可以使用解构来制作副本。

seriesTitles = ['depth', 'incline'];

var aSeries = { name: '', data: [{}] };

var seriesArray = [];

seriesTitles.forEach((element) => {
  aSeries.name = element;
  seriesArray.push({...aSeries});
});
console.log(seriesArray);

字符串

djmepvbi

djmepvbi2#

下面是工作示例:

let seriesTitles = ["depth", "incline"];

let seriesArray = [];

seriesTitles.forEach((element) => {
  // for every iteration  create new object
  let aSeries = { name: "", data: [{}] };
  aSeries.name = element;
  seriesArray.push(aSeries);
});

//
console.log(seriesArray);

字符串

wfveoks0

wfveoks03#

您添加了aSeries两次,并且碰巧修改了name。如果您想要不同的aSeries对象,那么可以创建一个副本,或者更改范围并在forEach内部创建它。
您可以使用展开运算符创建副本:

seriesTitles = ['depth','incline']      
const seriesArray  = []
const aSeries = {name: '',data: [{}]};
seriesTitles.forEach(element => { // outer loop
  aSeries.name = element;
  seriesArray.push({...aSeries});    
})
console.log(seriesArray)

字符串
或者只是将aSeries变量的声明移到for循环中,这样每次都示例化一个新的变量。

seriesTitles = ['depth','incline']      
const seriesArray  = []

seriesTitles.forEach(element => { // outer loop
  const aSeries =  {name: '',data: [{}]}
  aSeries.name = element;
  seriesArray.push(aSeries);    
})
console.log(seriesArray)

相关问题