groupBy
根据指定的键或函数对数组进行分组
分组依据
原始数据
[
{
"name": "Alice",
"age": 25,
"role": "admin",
"city": "Beijing"
},
{
"name": "Bob",
"age": 30,
"role": "user",
"city": "Shanghai"
},
{
"name": "Charlie",
"age": 25,
"role": "user",
"city": "Beijing"
},
{
"name": "David",
"age": 35,
"role": "admin",
"city": "Shanghai"
}
]分组结果
{
"admin": [
{
"name": "Alice",
"age": 25,
"role": "admin",
"city": "Beijing"
},
{
"name": "David",
"age": 35,
"role": "admin",
"city": "Shanghai"
}
],
"user": [
{
"name": "Bob",
"age": 30,
"role": "user",
"city": "Shanghai"
},
{
"name": "Charlie",
"age": 25,
"role": "user",
"city": "Beijing"
}
]
}函数签名
typescript
function groupBy<T>(
array: T[],
keyOrFn: keyof T | ((item: T) => string | number)
): Record<string, T[]>参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
array | T[] | 是 | 要分组的数组 |
keyOrFn | keyof T | ((item: T) => string | number) | 是 | 分组的键名或返回键的函数 |
返回值
| 类型 | 说明 |
|---|---|
Record<string, T[]> | 分组后的对象,键为分组标识,值为该组的数组元素 |
工作原理
- 遍历输入数组的每个元素
- 根据提供的键名或函数计算分组键
- 将元素添加到对应的分组中
- 返回包含所有分组的对象
使用示例
按属性分组
typescript
const users = [
{ name: 'Alice', role: 'admin' },
{ name: 'Bob', role: 'user' },
{ name: 'Charlie', role: 'user' }
]
const grouped = groupBy(users, 'role')
// {
// admin: [{ name: 'Alice', role: 'admin' }],
// user: [
// { name: 'Bob', role: 'user' },
// { name: 'Charlie', role: 'user' }
// ]
// }按函数分组
typescript
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 25 }
]
const grouped = groupBy(users, user =>
user.age >= 30 ? 'senior' : 'junior'
)
// {
// junior: [
// { name: 'Alice', age: 25 },
// { name: 'Charlie', age: 25 }
// ],
// senior: [{ name: 'Bob', age: 30 }]
// }