-
Notifications
You must be signed in to change notification settings - Fork 0
JS/TS groupBy #7
Copy link
Copy link
Open
Labels
Description
const groupBy = <T, K extends keyof any>(arr: T[], groupFn: (element: T) => K): Record<K, T[]> =>
arr.reduce(
(r, v, _i, _a, k = groupFn(v)) => ((r[k] || (r[k] = [])).push(v), r),
{} as Record<K, T[]>
);const groupBy = (arr, groupFn) =>
arr.reduce((r, v, _i, _a, k = groupFn(v)) => ((r[k] || (r[k] = [])).push(v), r), {});Usage
const data = [
{ name: 'John', status: 'online' },
{ name: 'Jane', status: 'online' },
{ name: 'Linda', status: 'offline' },
]
groupBy(data, e => e.status)
// {
// "online": [
// { "name": "John", "status": "online" },
// { "name": "Jane", "status": "online" }
// ],
// "offline": [
// { "name": "Linda", "status": "offline" }
// ]
// }Credits:
Reactions are currently unavailable