假设我们有如下的数组对象:
const users = [
{
name: 'Alice',
age: 25,
gender: 'female'
},
{
name: 'Bob',
age: 30,
gender: 'male'
},
{
name: 'Charlie',
age: 35,
gender: 'male'
},
{
name: 'David',
age: 40,
gender: 'male'
},
{
name: 'Emily',
age: 45,
gender: 'female'
}
];
我们希望将这个数组按 gender 分组,得到以下格式的新数组:
[
{
gender: 'female',
users: [
{
name: 'Alice',
age: 25,
gender: 'female'
},
{
name: 'Emily',
age: 45,
gender: 'female'
}
]
},
{
gender: 'male',
users: [
{
name: 'Bob',
age: 30,
gender: 'male'
},
{
name: 'Charlie',
age: 35,
gender: 'male'
},
{
name: 'David',
age: 40,
gender: 'male'
}
]
}
]
我们可以利用 reduce 方法和Object.values()方法来实现:
const groupBy = (list, key) => {
return list.reduce((result, currentValue) => {
(result[currentValue[key]] = result[currentValue[key]] || { gender: currentValue[key], users: [] })
.users.push(currentValue);
return result;
}, {});
};
const groupedUsers = Object.values(groupBy(users, 'gender'));
console.log(groupedUsers);
输出结果为:
[
{
"gender": "female",
"users": [
{
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"name": "Emily",
"age": 45,
"gender": "female"
}
]
},
{
"gender
上一篇:按键分组数组