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