JavaScript

Группировка и агрегация массива

Algonexys · 07.08.2026 · 👁 0

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))];