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

如何遍历含嵌套projects数组的对象数组并生成指定结构的新对象数组?

问题:转换嵌套对象数组生成扁平化的结果数组

我有如下嵌套结构的对象数组,每个对象包含projects属性,而projects本身也是一个对象数组:

const data = [
  {
    "title": "Release",
    "projects": [
      {
        "name": "Server",
        "result": {
          "success": 0,
          "failure": 100
        }
      }
    ]
  },
  {
    "title": "Payments",
    "projects": [
      {
        "name": "Platform1",
        "result": {
          "success": 100,
          "failure": 0
        }
      },
      {
        "name": "Platform2",
        "result": {
          "success": 50,
          "failure": 50
        }
      }
    ]
  }
]

我希望遍历这个数组,生成一个扁平化的数组,其中每个对象的name字段由原数据的title和对应项目的name拼接而成,预期结果如下:

const result = [
  { name: 'Release-Server', success: 0, failure: 100 },
  { name: 'Payments-Platform1', success: 100, failure: 0 },
  { name: 'Payments-Platform2', success: 50, failure: 50 }
];

我尝试了下面的代码,但不知道如何把处理后的对象推入新数组,没能得到预期结果:

data.forEach(prj => {
  prj.projects.forEach((project) => {
    // 不知道如何将这些信息推入新的对象数组
  })
});

解决方案

你的思路方向是对的,只需要补充几个小步骤就能实现需求,下面给你两种可行的写法:

方法一:基于你现有代码的完善版

先初始化一个空数组存储结果,然后在嵌套的forEach里构造目标对象并推入数组即可:

const result = [];

data.forEach(item => {
  item.projects.forEach(project => {
    // 拼接name字段,同时展开result里的成功/失败属性
    const newObj = {
      name: `${item.title}-${project.name}`,
      ...project.result
    };
    // 将新对象推入结果数组
    result.push(newObj);
  });
});

console.log(result);

方法二:更简洁的flatMap写法

如果想让代码更精炼,可以用flatMap替代嵌套forEach,它能直接帮你完成数组的映射+扁平化操作:

const result = data.flatMap(item => {
  return item.projects.map(project => ({
    name: `${item.title}-${project.name}`,
    ...project.result
  }));
});

console.log(result);

这两种写法都能得到你想要的结果,flatMap的优势在于它会先对每个外层元素执行map转换,再自动把所有子数组合并成一个扁平化的数组,非常适合处理这类嵌套数组的转换需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:59:06