Skip to content

JS/TS groupBy #7

@rootEnginear

Description

@rootEnginear
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:

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions