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

JavaScript中基于子数组展开父数组元素的实现咨询

解决嵌套数组拆分问题:将Campaign与对应Book一一映射

嘿,我懂你要实现的需求了——你需要把每个Campaign和它旗下的每本书拆分成独立的条目,生成一个扁平数组,每个条目同时包含Campaign的名称以及Book的标题和ISBN对吧?之前用_.flattenDeep没搞定是因为它只处理了Books数组的扁平化,没把Campaign的关键信息关联进去。下面给你两种实用的实现方式:

一、原生JavaScript实现(无需依赖库)

利用ES6的flatMap方法,它可以先对数组元素做映射,再自动将结果扁平化,完美适配这个场景:

const originalData = {
  "campaigns": [
    {
      "name": "1st Campaign",
      "books": [
        {"title": "1st book", "primary_isbn": "isbn1"},
        {"title": "2nd book", "primary_isbn": "isbn2"},
        {"title": "3rd book", "primary_isbn": "isbn3"}
      ]
    },
    {
      "name": "2nd cam",
      "books": [
        {"title": "4th book", "primary_isbn": "isbn4"},
        {"title": "5th book", "primary_isbn": "isbn5"}
      ]
    }
  ]
};

// 生成目标数组
const result = originalData.campaigns.flatMap(campaign => {
  // 对当前Campaign下的每本书,生成包含Campaign名称的新对象
  return campaign.books.map(book => ({
    campaignName: campaign.name,
    title: book.title,
    primary_isbn: book.primary_isbn
  }));
});

二、Lodash实现(结合你熟悉的工具库)

如果你更倾向用Lodash,可以用_.flatMap替代原生的flatMap,逻辑和原生一致,但兼容性更好(比如支持旧版浏览器):

const _ = require('lodash'); // 确保已引入Lodash

const result = _.flatMap(originalData.campaigns, campaign => {
  // 遍历当前Campaign的Books,组合成新对象
  return _.map(campaign.books, book => ({
    campaignName: campaign.name,
    ...book // 用扩展运算符直接展开Book的所有字段,更简洁
  }));
});

最终输出结果

两种方式都会得到如下结构的扁平数组:

[
  { campaignName: '1st Campaign', title: '1st book', primary_isbn: 'isbn1' },
  { campaignName: '1st Campaign', title: '2nd book', primary_isbn: 'isbn2' },
  { campaignName: '1st Campaign', title: '3rd book', primary_isbn: 'isbn3' },
  { campaignName: '2nd cam', title: '4th book', primary_isbn: 'isbn4' },
  { campaignName: '2nd cam', title: '5th book', primary_isbn: 'isbn5' }
]

为什么之前的_.flattenDeep没用?

你之前尝试的_.flattenDeep(data.campaigns.books)有两个问题:

  • data.campaigns是数组,不能直接通过.books访问子元素的books属性,得先遍历每个Campaign;
  • 就算你拿到所有Campaign的Books数组,_.flattenDeep只是把这些数组合并成一个纯Books数组,完全丢失了每个Book对应的Campaign名称,这显然不是你需要的关联结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:21:07