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

JavaScript如何将嵌套数组合并重构为单层标准对象数组

问题本质

你使用[].concat.apply([], arr)只能把外层嵌套数组打平,得到的是「记录对象、user对象、记录对象、user对象...」的平级结构,并没有将user属性合并到对应的记录对象中,因此达不到预期。

解决方案

遍历每个子数组,先提取同组共享的user对象,再给组内所有记录添加user属性,最后合并所有记录即可,代码如下:

const merged = arr.flatMap(subArr => {
  // 提取当前子数组中的公共user对象
  const user = subArr.find(item => item.user);
  // 筛选出子数组中所有的业务记录(排除user项)
  const records = subArr.filter(item => !item.user);
  // 给每条记录挂载user属性后返回
  return records.map(record => ({ ...record, user }));
});

如果运行环境不支持flatMap,可以替换为以下兼容写法:

const merged = [].concat.apply([], arr.map(subArr => {
  const user = subArr.find(item => item.user);
  const records = subArr.filter(item => !item.user);
  return records.map(record => ({ ...record, user }));
}));

处理后得到的merged就是你需要的[{_id: ..., user_id: ..., user: {...}}]格式的单层数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:06:03