【问题标题】:How to step through multiple arrays then aggregating them如何逐步遍历多个数组然后聚合它们
【发布时间】:2021-04-13 14:04:19
【问题描述】:

我有一个对象说人。假设我有 Person.pets.breeds.ages。宠物、品种和年龄都是对象数组。如果我想汇总所有年龄段的人,那么在不制作一堆 for 循环的情况下,最有效和最干净的方法是什么?我真的不想写这样的函数:

   var result = []
   
   for (var j in pets) {
     var pet = pets[j]
     for (var k in breeds) {
       var breed = breeds[k]
       for (var l in ages) {
         result.push(ages[l])
       }
     }
   }
   return result

【问题讨论】:

  • 如果只将ages 推送到结果数组,您的预期结果究竟是什么?
  • 应该是pet.breedsbreed.ages吧?

标签: javascript iteration aggregate


【解决方案1】:

在没有一堆 for 循环的情况下解决它的一种方法是利用flatMap

const person = {
  pets: [{
    breeds: [{
      ages: [{
        age: 1
      }]
    }, {
      ages: [{
        age: 2
      }]
    }]
  }, {
    breeds: [{
      ages: [{
        age: 3
      }]
    }, {
      ages: [{
        age: 4
      }]
    }]
  }]
};

const result = person.pets.flatMap(pet => pet.breeds.flatMap(b => b.ages));

console.log(result);

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多