Soy nuevo en JS y tengo problemas para sumar valores de una matriz a otra resumida.
tengo estos datos:
const data = [ { category: 'personal', amount: 80000, month: 'Diciembre', }, { category: 'comida', amount: 207000, month: 'Diciembre', }, { category: 'comida', amount: 43000, month: 'Diciembre', }, { category: 'salidas', amount: 124000, month: 'Diciembre', }, { category: 'casa', amount: 450505, month: 'Diciembre', }, { category: 'casa', amount: 500000, month: 'Diciembre', }, { category: 'varios', amount: 260000, month: 'Diciembre', }, { category: 'casa', amount: 296300, month: 'Diciembre', }, ];Y quiero convertirlo en algo como:
const dataSummarized = [ { category: 'personal', amount: TOTAL_AMOUNT_PERSONAL_CATEGORY month: 'Diciembre', }, { category: 'comida', amount: TOTAL_AMOUNT_COMIDA_CATEGORY month: 'Diciembre', }, { category: 'salidas', amount: TOTAL_AMOUNT_SALIDAS_CATEGORY, month: 'Diciembre', }, { category: 'casa', amount: TOTAL_AMOUNT_CASA_CATEGORY, month: 'Diciembre', } ];He probado varias opciones, pero sin resultados.
Algunas de las soluciones que he probado se publican aquí.
Evidentemente, me estoy perdiendo algo porque no pude hacerlo funcionar :(
¡Gracias por adelantado!
Luego podemos usar Array.reduce() para agrupar elementos por categoría, luego por mes (supongo que desea los totales de gastos por mes).
Creamos una clave de agrupación basada en categoría y mes, luego sumamos el monto total para cada una de estas claves:
const data = [ { category: 'personal', amount: 80000, month: 'Diciembre', }, { category: 'comida', amount: 207000, month: 'Diciembre', }, { category: 'comida', amount: 43000, month: 'Diciembre', }, { category: 'salidas', amount: 124000, month: 'Diciembre', }, { category: 'casa', amount: 450505, month: 'Diciembre', }, { category: 'casa', amount: 500000, month: 'Diciembre', }, { category: 'varios', amount: 260000, month: 'Diciembre', }, { category: 'casa', amount: 296300, month: 'Diciembre', }, ]; const result = Object.values(data.reduce((acc, { category, month, amount }) => { const key = `${category}-${month}`; acc[key] = acc[key] || { category, month, amount: 0 }; acc[key].amount += amount; return acc; }, {})); console.log('Result:', result); .as-console-wrapper { max-height: 100% !important; top: 0; }