Object.groupBy()
to statyczna metoda pozwalająca grupować elementy.
Jej składnia jest następująca:
Object.groupBy(items, callbackFn)
gdzie items
jest listą, którą będziemy grupować, a callbackFn
jest funkcją, którą będziemy wywoływać dla każdego elementu z listy. Funkcja ta będzie określać grupę, do której element ma trafić na nowej liście.
Jako przykład posłuży nam poniższa lista książek:
const books = [
{title: '1984', genre: 'Dystopian fiction', year: 1949},
{title: 'To Kill a Mockingbird', genre: 'Classic literature', year: 1960},
{title: 'The Great Gatsby', genre: 'Modernist novel', year: 1925},
{title: 'The Catcher in the Rye', genre: 'Classic literature', year: 1951},
{title: 'Pride and Prejudice', genre: 'Romance novel', year: 1813}
];
Chcąc stworzyć nową listę, w której pozycje będą pogrupowane gatunkami, wystarczy wywołać Object.groupBy
w następujący sposób:
Object.groupBy(books, ({ genre }) => genre)
// wynik:
{
"Dystopian fiction": [
{"title": "1984", "genre": "Dystopian fiction", "year": 1949},
],
"Classic literature": [
{"title": 'To Kill a Mockingbird', "genre": 'Classic literature', "year": 1960},
{"title": 'The Catcher in the Rye', "genre": 'Classic literature', "year": 1951},
],
"Romance novel": [
{"title": 'Pride and Prejudice', "genre": 'Romance novel', "year": 1813}
],
"Modernist novel": [
{"title": "The Great Gatsby", "genre": "Modernist novel", "year": 1925}
]
}
Bardziej zaawansowanym przykładem może być podział listy na grupy obejmujące nowe książki (wydane po 1900 roku) i stare (pozostałe):
Object.groupBy(books, ({year}) => year > 1900 ? "new" : "old")
// wynik:
{
"new": [
{"title": "1984", "genre": "Dystopian fiction", "year": 1949},
{"title": "The Great Gatsby", "genre": "Modernist novel", "year": 1925},
{"title": 'To Kill a Mockingbird', "genre": 'Classic literature', "year": 1960},
{"title": 'The Catcher in the Rye', "genre": 'Classic literature', "year": 1951},
],
"old": [
{"title": 'Pride and Prejudice', "genre": 'Romance novel', "year": 1813}
]
}