@future-widget-lab/record-set
Version:
A dedicated data structure for in-memory record collections, offering fluent, immutable APIs for MongoDB-like querying, sorting, and transformation.
33 lines (26 loc) • 730 B
text/typescript
type GroupByOptions<TRecord, TKey> = {
keyExtractor: (record: TRecord) => TKey;
records: Array<TRecord>;
};
/**
* @description
* Use helper to group records by a key derived from each record.
*
* It returns a `Map` where keys are group keys and values are record sets of grouped records.
*/
export const groupBy = <TRecord, TKey>(
options: GroupByOptions<TRecord, TKey>
): Map<TKey, Array<TRecord>> => {
const { keyExtractor, records } = options;
const map = new Map<TKey, Array<TRecord>>();
for (const record of records) {
const key = keyExtractor(record);
const group = map.get(key);
if (group) {
group.push(record);
} else {
map.set(key, [record]);
}
}
return map;
};