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
相关产品推荐
相关产品推荐

