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)
如何在两个属性之后对一组对象进行分组? 是否可以在以下情况下使用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)