Object.groupBy() - групує елементи об'єкта.
Object.groupBy(items, callbackFn);
items - спископодібний об'єкт (масив), елементи якого будуть згруповані.
callbackFn - функція яка виконується для кожного елемента в ітерабельному об'єкті. Функція повинена повертати значення, яке може бути перетворено на ключ властивості (рядок або символ), який вказує на групу поточного елемента.
groupBy() статичний метод об'єкта Object який групує елементи спископодібного об'єкта. Функція callbackFn повина певертати рядок до якої групи віднести даний елемент. Повертається об'єкт який містить відгруповані елементи.
Метод Object.groupBy() входить у специфікацію ES2024.
const people = [
{ name: "Oleksandr", gender: "male", age: 28 },
{ name: "Maria", gender: "female", age: 24 },
{ name: "Ivan", gender: "male", age: 35 },
{ name: "Olena", gender: "female", age: 30 },
{ name: "Kateryna", gender: "female", age: 29 }
];
let groupPeople=Object.groupBy(people, (person)=>person.gender);
alert(JSON.stringify(groupPeople));
var mas=[
{name:'Opel Astra G', fuel:'diesel', v:2},
{name:'Fiat Panda', fuel:'petrol', v:1.2},
{name:'BMW X5', fuel:'petrol', v:4.4},
{name:'Renault Trafic', fuel:'diesel', v:1.6}
];
var arr=Object.groupBy(mas, function(a){return a.fuel=='diesel'?'diesel':'petrol';});
/*
arr={
"diesel":[
{"name":"Opel Astra G","fuel":"diesel","v":2},
{"name":"Renault Trafic","fuel":"diesel","v":1.6}
],
"petrol":[
{"name":"Fiat Panda","fuel":"petrol","v":1.2},
{"name":"BMW X5","fuel":"petrol","v":4.4}
]
}
*/
console.log(arr);
const products = [
{ name: "Яблуко", price: 25.5 },
{ name: "Банан", price: 32.0 },
{ name: "Груша", price: 28.0 },
{ name: "Апельсин", price: 45.0 },
{ name: "Ківі", price: 60.0 },
{ name: "Виноград", price: 80.0 },
{ name: "Манго", price: 95.0 },
{ name: "Ананас", price: 120.0 },
{ name: "Полуниця", price: 150.0 },
{ name: "Черешня", price: 200.0 }
];
const group=Object.groupBy(products, function(a){
switch(true){
case a.price<30:
return 'cheap';
break;
case a.price<=90:
return 'medium';
break;
case a.price>90:
return 'expensive';
break;
}
});
console.log(group);