数据分组
typescript
interface GroupResult<T> {
[key: string]: Array<T>;
}
const groupBy = <T>(
arr: Array<T>,
generateKey: (item: T, i: number, arr: Array<T>) => string
) => {
const result: GroupResult<T> = {};
if (typeof generateKey === 'string') {
const paramName = generateKey;
generateKey = (p) => p[paramName];
}
for (let i = 0; i < arr.length; ++i) {
const key = generateKey(arr[i], i, arr);
if (result[key]) {
result[key].push(arr[i]);
} else {
result[key] = [arr[i]];
}
}
return result;
};