javascript 有没有更好的方法来使用Lodash计算对象中嵌套数组的数量?

mgdq6dx1  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(156)

我有一个嵌套数组的深度对象,看起来像这样:

{
   inspectionReport: {
     property: {
       structures: [
         0: {
           finishedSpaces: [
             0: levels: [
               0: rooms: [
                 0: //something I want to count
               ]
             ]
           ]
         }
       ]
     }
   }
}

我想找出所有rooms数组的总长度。最明显的方式是这样的:

let roomCount = 0;

results['inspectionReport']['property']['structures'].forEach(structure => {
  structure['finishedSpaces'].forEach(finishedSpace => {
    finishedSpace['levels'].forEach(rooms => {
      roomCount += rooms.length;
    });
  });
});

但这似乎有点丑陋。有没有更好的办法?

nimxete2

nimxete21#

您可以使用sumBy执行如下操作。

const totalRooms = _.sumBy(inspectionReport.property.structures, structure =>
  _.sumBy(structure.finishedSpaces, finishedSpace =>
    _.sumBy(finishedSpace.levels, level =>
      level.rooms.length
    )
  )
);

console.log(totalRooms);

您使用forEach提供的解决方案简单易懂。上述解决方案更加简洁和实用。所以由你来决定
此外,您可以研究一种解决方案,将其展平到levels阵列并使用sumBy()

const totalRooms = _.sumBy(
  _.flatMap(results['inspectionReport']['property']['structures'], 'finishedSpaces.levels'),
  'length'
);

ps:你可能要仔细检查以上代码,我还没有测试过.

相关问题