How can I categorize this array of objects by their categoria
?
items = [
{ categoria: 'Sandwiches', nombre: 'Sandwich de Pollo', precio: 12 },
{ categoria: 'Sandwiches', nombre: 'Sandwich de Lomo', precio: 12 },
{ categoria: 'Helados', nombre: 'Helado de 1 bola', precio: 5 },
{ categoria: 'Helados', nombre: 'Helado de 2 bolas', precio: 8 },
{ categoria: 'Helados', nombre: 'Helado de 3 bolas', precio: 10 },
];
This is the desired result, implemented in Typescript with Angular:
itemsResult = [
{
categoria: 'Sandwiches',
items: [
{ nombre: 'Sandwich de Pollo', precio: 12 },
{ nombre: 'Sandwich de Lomo', precio: 12 },
]
},
{
categoria: 'Helados',
items: [
{ nombre: 'Helado de 1 bola', precio: 5 },
{ nombre: 'Helado de 2 bolas', precio: 8 },
{ nombre: 'Helado de 3 bolas', precio: 10 },
]
},
];
I attempted using a reduce
, but it returned an object instead of an array.
this.itemsGroup = this.items.reduce((r, a) => {
r[a.categoria] = r[a.categoria] || [];
r[a.categoria].push(a);
return r;
}, Object.create(null));
console.log(this.itemsGroup);
{
Sandwiches: [
{ nombre: 'Sandwich de Pollo', precio: 12 },
{ nombre: 'Sandwich de Pollo', precio: 15 }
],
Helados: [
{ nombre: 'Helado de 1 bola', precio: 5 },
{ nombre: 'Helado de 2 bolas', precio: 8 },
{ nombre: 'Helado de 3 bolas', precio: 10 }
]
}