如何用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
相关产品推荐
相关产品推荐

