javascript中对象的分组数组

javascript中对象的分组数组,javascript,reduce,Javascript,Reduce,如何在两个属性之后对对象数组进行分组? 在以下情况下是否可以使用reduce 例如:按国家/地区和城市对以下数组进行分组,并对“age”属性求和: array = [ { age: 20, country: "England" city: "London", zip: "1234" }, { age: 25, country: "England" city: "London", zip: "12345" }, { age: 40, country: "En

如何在两个属性之后对对象数组进行分组? 在以下情况下是否可以使用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
完成此操作。使用此数组方法,从城市和国家匹配的累加器数组中查找对象的索引。这将以其他方式给出对象的索引,如果没有这样的对象,那么它将返回-1。如果是
-1
,则将对象从
reduce

let数组=[{
年龄:20,,
国家:“英格兰”,
城市:“伦敦”,
邮政编码:“1234”
},
{
年龄:25岁,
国家:“英格兰”,
城市:“伦敦”,
邮政编码:“12345”
},
{
年龄:40,,
国家:“英格兰”,
城市:“曼彻斯特”,
邮政编码:“123456”
}
]
让newArray=array.reduce((acc,curr)=>{
让getIndex=acc.findIndex((项目)=>{
返回item.country==curr.country&&item.city===curr.city
});
如果(getIndex==-1){
附件推送(当前)
}否则{
acc[getIndex]。年龄+=当前年龄
}
返回acc;
}, []);

console.log(newArray)
Brk,谢谢你的回答!这个解决方案非常适合我。