hd-utils
Version:
A handy utils for modern JS developers
41 lines (39 loc) • 1.08 kB
JavaScript
/**
* @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;
}, {});
}