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[]> ) }