groupBy — это утилита, которая организует элементы массива в группы на основе общего свойства или пользовательской логики, определённой callback-функцией.
function groupBy(arr, key) {
return arr.reduce((groups, item) => {
const val = typeof key === "function" ? key(item) : item[key];
(groups[val] ||= []).push(item);
return groups;
}, {});
}
arr.reduce проходит по массиву, накапливая результаты в один объект (groups)key принимает либо строку, либо функцию:
key — это функция, она вызывается с текущим элементом, чтобы получить метку группыkey — это строка, значение соответствующего свойства используется напрямуюgroups[val] ||= [] использует оператор присваивания с логическим ИЛИ — оно инициализирует массив группы, если его ещё нет, а затем добавляет в него элементconst people = [
{ name: "Alice", role: "admin" },
{ name: "Bob", role: "user" },
{ name: "Carol", role: "admin" },
];
groupBy(people, "role");
// { admin: [Alice, Carol], user: [Bob] }
groupBy([1, 2, 3, 4], n => n % 2 === 0 ? "even" : "odd");
// { odd: [1, 3], even: [2, 4] }
reduce для чистого и эффективного подхода за один проход||= делает код лаконичным, обеспечивая ленивую инициализацию массивов группФункция groupBy использует reduce для накопления элементов массива в единый объект, что гарантирует однопроходный обход массива независимо от используемой стратегии группировки.
Новый — ещё не проверен сообществом
Вы