You need to enable JavaScript to run this app. 如何使用Lodash将含嵌套数组的对象数组转换为指定交叉扁平对象数组
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash将含嵌套数组的对象数组转换为指定交叉扁平对象数组

使用Lodash实现数组交叉组合的数据转换

实现思路

需求本质是对每个原始对象内的b、c两个数组做全量笛卡尔配对,每一组配对都保留原对象的a字段值,最终把所有配对结果拼接成一维扁平数组。用Lodash的数组遍历、自动扁平化能力,就能省去手动初始化结果数组、手动拼接嵌套循环输出的冗余代码。

核心用到的Lodash方法

  • _.flatMap:遍历目标数组,将每个元素经回调转换后返回的嵌套数组自动拍平为一维结构,不用手动管理结果数组的拼接逻辑
  • _.map:遍历单个数组,将每个元素快速转换为指定结构的对象

完整实现代码

// Node.js 环境引入方式;浏览器端script标签引入Lodash可直接使用全局_对象
const _ = require('lodash');

// 原始输入数据
const codes = [
   {a: 'aa', b: [ 8518 ], c: [ '2146' ]},
   {a: 'bb', b: [ 120123 ], c: [ 'D835', 'DD3B' ]},
   {a: 'cc', b: [ 168, 532 ], c: [ '00A8' ] }
]

// 转换逻辑
const result = _.flatMap(codes, (originItem) => {
  // 遍历当前原始对象的b数组所有元素
  return _.flatMap(originItem.b, (bValue) => {
    // 遍历当前原始对象的c数组所有元素,生成交叉配对对象
    return _.map(originItem.c, (cValue) => ({
      a: originItem.a,
      b: bValue,
      c: cValue
    }))
  })
})

结果验证

运行上述代码生成的result数组,和题目给出的目标结构完全匹配:

[
   {a: 'aa', b:8518, c:'2146'},
   {a: 'bb', b:120123, c:'D835'},
   {a: 'bb', b:120123, c:'DD3B'},
   {a: 'cc', b:168, c:'00A8'},
   {a: 'cc', b:532, c:'00A8'}
]

扩展提示

如果后续需要支持更多待交叉的数组字段(比如新增d数组需要和b、c做全量配对),只需要在嵌套的flatMap层级中追加对应数组的遍历逻辑即可,整体代码结构不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 11:24:03