Group array items by a key function
JavaScript
// Group array items by an arbitrary key, preserving first-seen order.
function groupBy(items, keyFn) {
const groups = new Map();
for (const item of items) {
const key = keyFn(item);
if (!groups.has(key)) groups.set(key, []);
groups.get(key).push(item);
}
return groups;
}
const people = [
{ name: 'Ada', team: 'core' },
{ name: 'Linus', team: 'kernel' },
{ name: 'Grace', team: 'core' },
];
const byTeam = groupBy(people, (person) => person.team);
console.log([...byTeam.keys()]); // ['core', 'kernel']
console.log(byTeam.get('core').length); // 2