export function groupBy<T, K extends keyof any>(arr: T[], key: (i: T) => K): Record<K, T[]> { return arr.reduce( (groups, item) => { (groups[key(item)] ||= []).push(item); return groups; }, {} as Record<K, T[]>, ); }