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

JavaScript如何提取合并嵌套对象数组属性生成指定结构?

现有实现问题

你当前的代码可以跑通,但逻辑依赖persons数组的索引顺序匹配,一旦出现某条数据的persons数组长度、元素顺序不一致的情况,会出现姓名匹配错误的潜在问题。


更优实现方案

方案1:通用鲁棒版本(支持多id分组)

用Map做id索引分组,不受元素顺序、长度影响,适配所有场景:

const result = data.reduce((acc, { persons, type }) => {
  acc.types.push(type);
  persons.forEach(({ id, name }) => {
    acc.peopleMap.has(id) 
      ? acc.peopleMap.get(id).names.push(name)
      : acc.peopleMap.set(id, { id, names: [name] });
  });
  return acc;
}, { peopleMap: new Map(), types: [] });

result.people = Array.from(result.peopleMap.values());
delete result.peopleMap;

方案2:极简版本(适配你给出的固定场景)

如果你的业务场景确定所有persons数组永远只有1个元素、且id固定为1,可以直接两次map遍历,代码最简洁、性能最高:

const result = {
  people: [{ id: 1, names: data.map(i => i.persons[0].name) }],
  types: data.map(i => i.type)
};

实现优势

  • 去掉了索引遍历的潜在风险,逻辑语义更明确
  • 极简版本相比reduce实现少了分支判断,执行效率更高
  • 通用版本支持多id自动分组,后续业务扩展不需要重写逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:21:01