Object.groupBy to ta nowość w JavaScript, której nie chcemy przegapić. Funkcja niezwykle przydatna, zwłaszcza gdy pracujemy na tablicach zawierających obiekty, które można podzielić na jakieś typy. Must-know z nowości wprowadzonych ostatnio do JS.
Metoda obiektów groupBy – dodana do JS dość niedawno – pozwala nam pogrupować listę obiektów na obiekt zawierający listy z różnymi typami – według naszej własnej logiki. Rzućmy okiem na przykładową listę obiektów:
<script>
const inventory = [
{ name: "asparagus", type: "vegetables", quantity: 5 },
{ name: "bananas", type: "fruit", quantity: 0 },
{ name: "goat", type: "meat", quantity: 23 },
{ name: "cherries", type: "fruit", quantity: 5 },
{ name: "fish", type: "meat", quantity: 22 },
];
</script>
Pogrupujmy sobie te obiekty według typu posiłku:
const result = Object.groupBy(inventory, ({ type }) => type);
console.log(result);
/* Result is:
{
vegetables: [
{ name: 'asparagus', type: 'vegetables', quantity: 5 },
],
fruit: [
{ name: "bananas", type: "fruit", quantity: 0 },
{ name: "cherries", type: "fruit", quantity: 5 }
],
meat: [
{ name: "goat", type: "meat", quantity: 23 },
{ name: "fish", type: "meat", quantity: 22 }
]
}
*/
Tak to wygląda – obiekt posiada klucze, którymi są typy posiłków. Tam mamy pogrupowane posiłki danego typu – warzywa w warzywach, owoce w owocach i tak dalej.
Możemy też stworzyć własną logikę, bardziej zaawansowaną niż tylko „pogrupuj mi używając pola type”.
Oto zbiór obiektów person:
<script>
const people = [
{ name: "John", age: 20},
{ name: "Jane", age: 30},
{ name: "Bob", age: 12},
];
</script>
Pogrupujemy je sobie po kluczu wiek. W sensie – grupujemy na pełnoletnich oraz dzieci.
<script>
const people = [
{ name: "John", age: 20},
{ name: "Jane", age: 30},
{ name: "Bob", age: 12},
];
function byAge({age}) {
return age >= 18 ? "adult" : "child";
}
let result = Object.groupBy(people, byAge);
console.log(result);
</script>
Nasza funkcja wyłuskuje age z danego obiektu i sprawdza, czy obiekt jest pełnoletni czy nie.
Dalej sobie grupujemy po tym kluczu i w efekcie dostajemy obiekt z kluczami „adult” i „child”. W pierwszym – lista obiektów John i Jane, w drugim – lista z obiektem Bob.
Metoda groupBy może okazać się bardzo potężna i warto ją znać.