You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript遍历数组生成JSON数据时重复添加最后项问题求助

问题分析与解决

问题根源

JavaScript里的对象属于引用类型,你只创建了一个aSeries对象。在forEach循环中,每次修改的都是这个对象的name属性,然后把同一个对象的引用推入数组。这就导致数组里的两个元素其实指向同一个对象,最终显示的自然是最后一次修改的name值(也就是incline)。

修正方案

要解决这个问题,核心是每次循环时创建新的对象,而不是复用同一个对象的引用,有两种常见实现方式:

方式一:循环内直接创建新对象

把对象的创建逻辑放到循环内部,每次迭代都生成全新的对象:

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

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

方式二:基于基础对象复制新对象

如果有固定的对象结构需要复用,可以用展开语法(...)或Object.assign复制基础对象并修改属性:

const seriesTitles = ['depth', 'incline'];
// 定义基础结构
const baseSeries = { data: [{}] };
const seriesArray = [];

seriesTitles.forEach((element) => {
  // 复制基础对象并添加/覆盖name属性
  const aSeries = { ...baseSeries, name: element };
  seriesArray.push(aSeries);
});
console.log(seriesArray);

两种方式都会让数组中的每个元素指向独立的对象,修改各自的属性不会互相影响,最终就能得到你期望的输出。

内容的提问来源于stack exchange,提问作者DaveLister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:22:43