UNPKG

hd-utils

Version:

A handy utils for modern JS developers

41 lines (39 loc) 1.08 kB
/** * @description function to categorizes an array of objects by a key or condition. It also supports optional object transformation before grouping. * @example * groupBy( [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 25 }, { name: 'David', age: 30 }, ], 'age', (person) => ({ ...person, isNew: person.age < 30 }) ) // { 25: [ { name: 'Alice', age: 25, isNew: true }, { name: 'Charlie', age: 25, isNew: true }, ], 30: [ { name: 'Bob', age: 30, isNew: false }, { name: 'David', age: 30, isNew: false }, ], }; */ export default function groupBy(array, keyOrCondition, transform) { const isFunction = typeof keyOrCondition === 'function'; return array.reduce((result, item) => { const key = isFunction ? keyOrCondition(item) : item[keyOrCondition]; if (!result[key]) { result[key] = []; } const transformedItem = transform ? transform(item, key) : item; result[key].push(transformedItem); return result; }, {}); }