groupBy 【分组】
描述
根据给定函数对数组的元素进行分组 v3.0.23+
# 1.示例
import { groupBy } from 'sf-utils2'
groupBy([6.1, 4.2, 6.3], Math.floor) // {4: [4.2], 6: [6.1, 6.3]}
groupBy(['one', 'two', 'three'], 'length') // {3: ['one', 'two'], 5: ['three']}
1
2
3
4
2
3
4
# 2.入参说明
| 参数 | 说明 | 类型 | 是否必填 |
|---|---|---|---|
| array | 原数组 | Array | 是 |
| fn | 过滤规则 | Function, string, number | 是 |
# 如果 fn 是方法,回调参数为
| 参数 | 说明 | 类型 | 是否必填 | 默认值 |
|---|---|---|---|---|
| item | 定义 children 键名 | any | 否 | |
| index | 索引值 | number | 否 | |
| array | 索引值 | any[] | 否 |
# 3.源码
/**
* 根据给定函数对数组的元素进行分组
* @param {any[]} arr 原数组
* @param {(value:any, index: number, array: any[]) => boolean} fn
* @return {*}
* @example
* groupBy([6.1, 4.2, 6.3], Math.floor) // {4: [4.2], 6: [6.1, 6.3]}
* groupBy(['one', 'two', 'three'], 'length') // {3: ['one', 'two'], 5: ['three']}
*/
function groupBy(arr = [], fn) {
return arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
acc[val] = (acc[val] || []).concat(arr[i])
return acc
}, {})
}
export default groupBy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2023/08/31, 22:48:39