Skip to content

groupBy

Import from @varavel/vdl-plugin-sdk/utils/arrays.

function groupBy<T, K>(arr, getKeyFromItem): Record<K, T[]>;

Groups the elements of an array based on a provided key-generating function.

This function takes an array and a function that generates a key from each element. It returns an object where the keys are the generated keys and the values are arrays of elements that share the same key.

Type Parameters

Type Parameter Description
T The type of elements in the array.
K extends PropertyKey The type of keys.

Parameters

Parameter Type Description
arr readonly T[] The array to group.
getKeyFromItem (item, index, array) => K A function that generates a key from an element, its index, and the array.

Returns

Record\<K, T[]>

An object where each key is associated with an array of elements that share that key.

Examples

const array = [
  { category: 'fruit', name: 'apple' },
  { category: 'fruit', name: 'banana' },
  { category: 'vegetable', name: 'carrot' }
];
const result = groupBy(array, item => item.category);
// result will be:
// {
//   fruit: [
//     { category: 'fruit', name: 'apple' },
//     { category: 'fruit', name: 'banana' }
//   ],
//   vegetable: [
//     { category: 'vegetable', name: 'carrot' }
//   ]
// }
// Using index parameter
const items = ['a', 'b', 'c', 'd'];
const result = groupBy(items, (item, index) => index % 2 === 0 ? 'even' : 'odd');
// result will be: { even: ['a', 'c'], odd: ['b', 'd'] }