使用 Lodash 打平嵌套对象

3

我正在遍历一个属性设置为数组的对象,然后以以下方式使用它:

  let merged= [];
  for (let sup of superObject) {
    let sname = sup.superObjectName;
    for (let sub of sup.subObject) {
      merged.push({superObject: sname, subObject: sub.subObjectName})
    }
  }

现在这段代码可以运行并完成工作,但我感觉可以使用Lodash进行优化,但是我无法让它工作。我尝试了几种不同的方式来使用flatMap,但似乎都没有起作用,而在功能方面朝着正确方向的一个看起来并不像是一种改进。

更新: superObject示例:

{
   superObjectName: "someName",
   subObject: [
      {subObjectName: "someSubName"},
      {subObjectName: "someSubName2"}
    ]
 }

2
请添加使用数据的示例,以及预期结果。 - Ori Drori
编辑你的问题并添加在superObject中获取到的内容。 - Just code
Array.prototype.flat,避免使用无用的库以保持最佳性能。 - Szymon D
2个回答

4
这段代码与您的代码相同:
const merged = _.flatMap(superObject, ({superObjectName, subObject}) =>
    _.map(subObject, ({subObjectName}) => ({
        superObject: superObjectName,
        subObject: subObjectName
    }))
);

每个在superObject中的值都被转换为一个带有map的数组,然后在flatMap内进行平铺。

2
您可以使用lodash的flatMap方法来获取props并获得期望的结果,代码如下所示: flatMap

var data= [{
   superObjectName: "someName",
   subObject: [
      {subObjectName: "someSubName"},
      {subObjectName: "someSubName2"}
    ]
 }];

const result = _.flatMap(data, ({ superObjectName, subObject}) =>
  _.map(subObject, ({subObjectName})=> ({superObject: superObjectName, subObject: subObjectName}))
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接