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

如何用JS对多层嵌套对象数组深度扁平化生成Excel导出数据

固定层级嵌套数组扁平化导出Excel实现方案

你现有代码仅完成了客户端到项目层的两层展开,由于你的数据层级固定(客户端 -> 项目 -> 源语言配置 -> 目标语言条目),直接连续使用flatMap逐层拆解数组属性,在最内层目标语言条目处组装行数据即可,逻辑清晰且无额外性能开销。

实现代码

/**
 * 将多层嵌套的客户项目语言数据扁平化为Excel可用的二维行结构
 * @param {Array} rawData 原始嵌套数据
 * @returns {Array<Array>} 二维数组,每个子数组对应Excel一行数据
 */
const flattenForExcel = (rawData) => {
  return rawData.flatMap(client => 
    client.projects.flatMap(project => 
      project.languages.flatMap(lang => 
        lang.targets.map(target => [
          client.clientName,
          project.projectName,
          lang.sourceLanguageName,
          target.targetLanguageName,
          target.numItems,
          target.numItemsSold
        ])
      )
    )
  )
}

使用说明

  • 方法返回标准二维数组结构,可直接传入xlsx、exceljs等主流Excel导出库使用,无需额外格式转换
  • 你给出的期望输出示例存在JSON语法错误:{"Client One", "Proyect One"...}不是合法JS/JSON结构,二维数组才是表格导出场景的标准数据格式
  • 若需要额外保留id、统计值等其他字段,直接在最内层map的返回数组中按列顺序追加对应属性即可,例如需要客户端id就追加client.idClient

输出结果

传入你提供的原始数据调用方法,输出结果和你的预期完全匹配(修正了你示例中最后一行目标语言的笔误):

[
  ["Client One", "Project One", "Spanish", "English", 36, 30],
  ["Client One", "Project One", "Spanish", "French", 36, 7],
  ["Client One", "Project Two", "Spanish", "English", 30, 3],
  ["Client One", "Project Two", "Spanish", "French", 20, 7]
]

如果后续数据层级不固定(比如某层可能动态新增嵌套数组),可以再改成递归通用扁平化方案,但针对你当前固定结构的场景,逐层flatMap的实现可读性和维护性最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:34