Object.groupBy / Map.groupBy în JavaScript

Obiecte ES2024

Grupează elementele unei liste după o cheie calculată, într-un obiect sau într-un Map.

Sintaxă
Object.groupBy(lista, (element) => cheie)
Map.groupBy(lista, (element) => cheie)

Ce face Object.groupBy / Map.groupBy

Funcția primește fiecare element și returnează cheia grupului. Rezultatul are câte o proprietate pentru fiecare cheie, cu tabloul elementelor din acel grup, în ordinea inițială.

Object.groupBy returnează un obiect fără prototip, cu chei text. Map.groupBy returnează un Map, deci cheile pot fi de orice tip, inclusiv obiecte sau numere.

Parametri

Parametru Descriere
lista Orice iterabil (tablou, Set etc.).
functie Primește (element, indice) și returnează cheia grupului.

Ce returnează

Un obiect (fără prototip) sau un Map cu tablourile grupurilor.

Exemple

Exemplul 1: Produse pe categorii

const produse = [
  { nume: "Mere", categorie: "fructe" },
  { nume: "Morcovi", categorie: "legume" },
  { nume: "Pere", categorie: "fructe" },
];

const grupuri = Object.groupBy(produse, (p) => p.categorie);
console.log(grupuri.fructe.map((p) => p.nume));
console.log(Object.keys(grupuri));

Rezultat

[ 'Mere', 'Pere' ]
[ 'fructe', 'legume' ]

Exemplul 2: Note de trecere și restanțe, cu Map.groupBy

const note = [9, 4, 7, 3, 10];
const trecut = Map.groupBy(note, (n) => n >= 5);

console.log(trecut.get(true), trecut.get(false));

Rezultat

[ 9, 7, 10 ] [ 4, 3 ]

Greșeli frecvente

  • Apelezi metoda pe tablou: produse.groupBy(...) dă TypeError. Metoda este pe Object și pe Map.
  • Folosești rezultatul lui Object.groupBy cu hasOwnProperty. Obiectul nu are prototip; folosește Object.hasOwn sau operatorul in.

Comenzi înrudite

  • reduce: Combină toate elementele unui tablou într-o singură valoare: o sumă, un obiect, un text.
  • Map (get, set, has, delete): O colecție de perechi cheie–valoare în care cheile pot fi de orice tip și ordinea este păstrată.
  • Object.entries: Transformă un obiect într-un tablou de perechi [cheie, valoare], ușor de parcurs.