534просмотров
54.2%от подписчиков
25 сентября 2025 г.
Score: 587
Привет! Недавно мы разбирали нативный метод Object.groupBy, а сегодня разберём задачу с реализацией кастомного groupBy. Задача
Дан массив объектов: const users = [ { name: 'Алиса', age: 21 }, { name: 'Макс', age: 25 }, { name: 'Ваня', age: 21 },
]; Нужно сгруппировать по возрасту: groupBy(users, user => user.age);
// Результат:
// {
// 21: [{ name: 'Алиса', age: 21 }, { name: 'Ваня', age: 21 }],
// 25: [{ name: 'Макс', age: 25 }]
// } Решение через reduce: function groupBy(array, fn) { return array.reduce((acc, item) => { const key = fn(item); (acc[key] ||= []).push(item); return acc; }, {});
} Как работает?
1. reduce накапливает объект acc.
2. Для каждого item вычисляем ключ через fn(item).
3. Если ключа нет в acc, создаём массив.
4. Добавляем item в этот массив.
5. Возвращаем обновлённый acc. #JavaScript #interview