import { GroupMatchingFunction, IGrouping, TransformFunction } from './types'; export function group( array: T[], matchBy: GroupMatchingFunction, ): IGrouping { const result: IGrouping = {}; array.forEach((item) => { const grouping = matchBy(item); if (!(grouping in result)) { result[grouping] = [item]; } else { result[grouping].push(item); } }); return result; } export function groupAndMap( array: T[], matchBy: GroupMatchingFunction, transform: TransformFunction, ): IGrouping { const result: IGrouping = {}; array.forEach((item) => { const grouping = matchBy(item); if (!(grouping in result)) { result[grouping] = [transform(item)]; } else { result[grouping].push(transform(item)); } }); return result; }