Tengo datos como este:
const items = [ {category: 'food', amount: 5}, {category: 'food', amount: 5}, {category: 'transport', amount: 2}, {category: 'travel', amount: 11}, {category: 'travel', amount: 1}, ] ¿Cómo puedo sumar la amount y agrupar por cada category dando como resultado:
{ food : 10, transport : 2, travel : 12, }Usar reduceBy es probablemente una buena idea. Aquí tienes una alternativa por si te resulta útil.
Comience con una función de itemize :
const itemize = ({category: c, amount: a}) => ({[c]: a}); itemize({category: 'food', amount: 5}); //=> {food: 5}Luego defina una función que pueda agregar o fusionar elementos:
const additem = mergeWith(add); additem({food: 5}, {food: 5}); //=> {food: 10} additem({food: 5}, {transport: 2}); //=> {food: 5, transport: 2}Finalmente use estas dos funciones en un reductor:
reduce((a, b) => additem(a, itemize(b)), {}, items);