/** * Groups the values by the key function. * * @internal * * @param values The values to group. * @param keyMapper The function to get the key from the value. */ export function groupBy( values: ReadonlyArray, keyMapper: (value: TValue) => string | number ): Record; /** * Groups the values by the key function and maps the values. * * @internal * * @param values The values to group. * @param keyMapper The function to get the key from the value. * @param valueMapper The function to get the value from the value. */ export function groupBy( values: ReadonlyArray, keyMapper: (value: TOriginalValue) => string | number, valueMapper: (value: TOriginalValue) => TMappedValue ): Record; /** * Groups the values by the key function and maps the values. * * @internal * * @param values The values to group. * @param keyMapper The function to get the key from the value. * @param valueMapper The function to map the value. */ export function groupBy( values: ReadonlyArray, keyMapper: (value: TOriginalValue) => string | number, valueMapper: (value: TOriginalValue) => TMappedValue = (value) => value as unknown as TMappedValue ): Record { const result: Record = {}; for (const value of values) { const key = keyMapper(value); if (result[key] === undefined) { result[key] = []; } result[key].push(valueMapper(value)); } return result; }