【问题标题】:Grouping array of objects in javascript [duplicate]在javascript中分组对象数组[重复]
【发布时间】:2020-05-20 09:13:52
【问题描述】:

如何在两个属性之后对一组对象进行分组? 以下情况可以使用reduce吗?

例如:按国家和城市对以下数组进行分组并对“年龄”属性求和:

array = [
{
  age: 20,
  country: "England"
  city: "London",
  zip: "1234"
},
{
  age: 25,
  country: "England"
  city: "London",
  zip: "12345"
},
{
  age: 40,
  country: "England"
  city: "Manchester",
  zip: "123456"
}
]

/* 预期结果:*/

expectedArray = [
{
  age: 45, /* 20 + 25 */
  country: "England"
  city: "London",
  zip: "Not relevant"
},
{
  age: 40,
  country: "England"
  city: "Manchester",
  zip: "NR"
]

【问题讨论】:

    标签: javascript reduce


    【解决方案1】:

    您可以使用findIndex 做到这一点。使用此数组方法从城市和国家匹配的累加器数组中查找对象的索引。如果没有这样的对象,这将给出对象的索引,否则它将返回-1。如果是-1,则将对象从主数组推入reduce的累加器数组中

    let array = [{
        age: 20,
        country: "England",
        city: "London",
        zip: "1234"
      },
      {
        age: 25,
        country: "England",
        city: "London",
        zip: "12345"
      },
      {
        age: 40,
        country: "England",
        city: "Manchester",
        zip: "123456"
      }
    ]
    
    let newArray = array.reduce((acc, curr) => {
      let getIndex = acc.findIndex((item) => {
        return item.country === curr.country && item.city === curr.city
      });
    
    
      if (getIndex === -1) {
        acc.push(curr)
      } else {
        acc[getIndex].age += curr.age
    
      }
    
      return acc;
    }, []);
    
    console.log(newArray)

    【讨论】:

    • Brk,谢谢你的回答!这个解决方案非常适合我。
    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2018-03-25
    • 2021-09-14
    • 2017-08-09
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多