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

如何用JS/Lodash高效转换含嵌套数组的对象数组?

实现方案

使用 Lodash 简洁实现

利用 Lodash 的 flatMap 方法可以一步完成遍历与扁平化,避免嵌套循环的冗余:

const arrObj = [
  { key1: [[1,2], [3,4], [5,6]] },
  { key2: [[7,8], [9,10]] },
];

const arrObjTransformed = _.flatMap(arrObj, obj => {
  // 取出每个对象的唯一键和对应的嵌套数组
  const [key, chunks] = Object.entries(obj)[0];
  // 将每个子数组包装为单独对象
  return chunks.map(chunk => ({ [key]: chunk }));
});

原生 JavaScript 实现(无需 Lodash)

如果项目中不想依赖 Lodash,ES2019 引入的 Array.prototype.flatMap 可以实现同样效果:

const arrObjTransformed = arrObj.flatMap(obj => {
  const [key, chunks] = Object.entries(obj)[0];
  return chunks.map(chunk => ({ [key]: chunk }));
});

兼容多键对象的扩展方案

如果原数组中的对象可能包含多个键(而非示例中的单个键),可以调整为遍历所有键值对:

// Lodash 版本
const arrObjTransformed = _.flatMap(arrObj, obj => 
  _.flatMap(Object.entries(obj), ([key, chunks]) => 
    chunks.map(chunk => ({ [key]: chunk }))
  )
);

// 原生版本
const arrObjTransformed = arrObj.flatMap(obj => 
  Object.entries(obj).flatMap(([key, chunks]) => 
    chunks.map(chunk => ({ [key]: chunk }))
  )
);

这些方案通过链式调用替代嵌套循环,代码更简洁且可读性更高,同时保持了高效的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:01:11