Вопрос проверяет знание методов группировки массивов в JavaScript, что необходимо для эффективной обработки данных.
Разделение массива на группы по условию — частая задача при обработке данных. Например, нужно разбить пользователей по возрасту или товары по категориям. В JavaScript есть несколько подходов, от классических до современных.
Самый универсальный способ — использовать reduce. Он проходит по каждому элементу и собирает результат в объект, где ключи — названия групп, а значения — массивы элементов.
const items = [
{ name: 'A', type: 'fruit' },
{ name: 'B', type: 'vegetable' },
{ name: 'C', type: 'fruit' }
];
const grouped = items.reduce((acc, item) => {
const key = item.type;
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
console.log(grouped);
// { fruit: [{...}, {...}], vegetable: [{...}] }Если нужно разделить массив на две группы по условию (true/false), удобно использовать filter дважды или один reduce.
const numbers = [1, 2, 3, 4, 5];
const [even, odd] = numbers.reduce(
([even, odd], n) => {
n % 2 === 0 ? even.push(n) : odd.push(n);
return [even, odd];
},
[[], []]
);
console.log(even); // [2, 4]
console.log(odd); // [1, 3, 5]В ES2024 появился нативный метод Object.groupBy, который делает код чище. Однако он пока не везде поддерживается, поэтому может потребоваться полифилл.
const grouped = Object.groupBy(items, item => item.type);
console.log(grouped);
// { fruit: [{...}, {...}], vegetable: [{...}] }Группировка массивов применяется везде, где нужно агрегировать данные: от UI-компонентов до серверной обработки. Для максимальной совместимости используйте reduce, а для современных проектов — Object.groupBy с полифиллом.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию