javascript 中的对象数组分组

Grouping array of objects in javascript

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

例如:按国家和城市对以下数组进行分组并对 "age" 属性:

求和
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"
]

您可以使用 findIndex 来做到这一点。使用此数组方法从城市和国家/地区匹配的累加器数组中找到对象的索引。如果没有这样的对象,这将给出对象的索引,否则它将 return -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)