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

JavaScript如何正确将多个JSON对象合并存入同一个数组

问题根因

你当前代码无法得到扁平结果的核心原因是:DataList中存储的每段JSON字符串,解析后本身就是长度为1的数组。直接调用push()传入整个解析后的数组,会把这个数组作为单个元素插入目标数组,最终生成[ [obj1], [obj2], [obj3] ]的嵌套结构,不符合预期。

可行解决方案

方案1:修改原有循环逻辑

不需要单独判断索引为0的分支,初始化空结果数组后,每次解析完当前项,把解析得到的数组里的元素逐个追加到结果数组即可,用展开运算符实现最直观:

const mergetData = [];
for (let i = 0; i < DataList.length; i++) {
  const currentParsed = JSON.parse(DataList[i]);
  // 展开运算符会把currentParsed里的元素拆出来逐个push,不会产生嵌套
  mergetData.push(...currentParsed);
}

// 如果最终需要输出JSON字符串,直接序列化即可
const finalJsonStr = JSON.stringify(mergetData);

如果需要兼容不支持ES6展开运算符的老旧环境,可以替换成apply写法实现同样效果:

mergetData.push.apply(mergetData, JSON.parse(DataList[i]));

方案2:更简洁的函数式写法

直接用数组的flatMap方法一步完成解析+打平,代码更短:

// flatMap会自动将每次回调返回的数组打平一层,刚好适配当前场景
const mergetData = DataList.flatMap(item => JSON.parse(item));
const finalJsonStr = JSON.stringify(mergetData);

注:你给出的期望输出示例存在格式笔误,每个对象外层多余了单独的方括号包裹,标准合法的合并后JSON结构应为单个大数组,内部直接存放所有对象,即[{name:"1",...}, {name:"2",...}, {name:"3",...}]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:39:15