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

如何在JavaScript中将嵌套数组合并为包含主对象信息的指定数组?

合并嵌套数组并保留主对象信息

原始代码与问题

const data = [{ id: 1, items: [{ id: 1, name: 'R1'}]},{id: 2, items: [{ id: 1, name: 'R2'},{ id: 1, name: 'R3'}]}];

// 原错误实现
data.map((item) => item.items).data.reduce((acc, curr) => acc.concat(curr), [])
 
console.log(data)

当前输出仅包含嵌套数组元素:

[
  { id: 1, name: 'R1'},
  { id: 1, name: 'R2'},
  { id: 1, name: 'R3'}
]

预期输出需要同时包含主对象的id信息和嵌套数组元素:

[
  { id: 1 },
  { id: 1, name: 'R1' },
  { id: 2 },
  { id: 1, name: 'R2'},
  { id: 1, name: 'R3'}
];

正确实现方案

方案1:使用flatMap

flatMap可以遍历数组并自动展平返回的子数组,刚好适配这种需要在主对象信息后拼接嵌套元素的场景:

const data = [{ id: 1, items: [{ id: 1, name: 'R1'}]},{id: 2, items: [{ id: 1, name: 'R2'},{ id: 1, name: 'R3'}]}];

const result = data.flatMap(item => [
  { id: item.id }, // 插入主对象的id信息
  ...item.items    // 展开嵌套的items数组
]);

console.log(result);

方案2:使用reduce

如果需要更手动的流程控制,reduce也能实现相同效果:

const data = [{ id: 1, items: [{ id: 1, name: 'R1'}]},{id: 2, items: [{ id: 1, name: 'R2'},{ id: 1, name: 'R3'}]}];

const result = data.reduce((acc, item) => {
  acc.push({ id: item.id }); // 添加主对象id
  acc.push(...item.items);   // 添加嵌套数组的所有元素
  return acc;
}, []);

console.log(result);

原代码问题说明

  1. 笔误:第一个对象的属性名写成了iitems,应该改为items,否则无法正确获取嵌套数组;
  2. 语法错误:data.map(...)返回的是数组,没有.data属性,调用.data.reduce会直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36