JavaScript
Группировка и агрегация массива
Object.groupBy, reduce и сортировка по нескольким полям — повседневные операции над списками.
Код
const orders = [
{ id: 1, user: 'ivan', status: 'paid', total: 1200 },
{ id: 2, user: 'anna', status: 'new', total: 450 },
{ id: 3, user: 'ivan', status: 'new', total: 890 },
{ id: 4, user: 'anna', status: 'paid', total: 2300 },
];
// Группировка (Object.groupBy — ES2024; ниже универсальный аналог)
const groupBy = (items, keyFn) =>
items.reduce((acc, item) => {
const key = keyFn(item);
(acc[key] ||= []).push(item);
return acc;
}, {});
console.log(groupBy(orders, (o) => o.status));
// Сумма по пользователю
const totals = orders.reduce((acc, o) => {
acc[o.user] = (acc[o.user] ?? 0) + o.total;
return acc;
}, {});
console.log(totals); // { ivan: 2090, anna: 2750 }
// Сортировка: сначала по статусу, затем по сумме по убыванию
const sorted = [...orders].sort(
(a, b) => a.status.localeCompare(b.status) || b.total - a.total
);
// Уникальные значения
const users = [...new Set(orders.map((o) => o.user))];