Forcing "type" to be explicit, works best will rollup on the frontend to exclude depdendencies
28 lines
660 B
TypeScript
28 lines
660 B
TypeScript
import { type StringPropertyKeys } from '@/utils/trim-and-remove-duplicated-whitespaces-from-object-string-properties';
|
|
import { isDefined } from '@/utils/validation';
|
|
|
|
export const fromArrayToValuesByKeyRecord = <T extends object>({
|
|
array,
|
|
key,
|
|
}: {
|
|
array: T[];
|
|
key: StringPropertyKeys<T>;
|
|
}) => {
|
|
return array.reduce<Record<string, T[]>>((acc, value) => {
|
|
const computedKey = value[key] as string;
|
|
const occurrence = acc[computedKey];
|
|
|
|
if (isDefined(occurrence)) {
|
|
return {
|
|
...acc,
|
|
[computedKey]: [...occurrence, value],
|
|
};
|
|
}
|
|
|
|
return {
|
|
...acc,
|
|
[computedKey]: [value],
|
|
};
|
|
}, {});
|
|
};
|