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ć.