Estoy buscando sumar los campos de mis objetos de acuerdo con un valor de mi objeto
Por ejemplo, tengo una matriz:
[ { "month": 4, "periodDays": 1, "expected": 5 }, { "month": 5, "periodDays": 10, "expected": 40 }, { "month": 5, "periodDays": 11, "expected": 35 }, { "month": 6, "periodDays": 8, "expected": 20 } ]y yo quiero:
[ { "month": 4, "periodDays": 1, "expected": 5 }, { "month": 5, "periodDays": 21, "expected": 75 }, { "month": 6, "periodDays": 8, "expected": 20, },Sé que puedo usar el reductor pero no puedo hacer que funcione con una condición.
Puede usar Array.reduce() para crear el resultado deseado.
Comenzamos creando un mapa utilizando el valor del month como clave. Luego inicializamos los días del período y los valores esperados a cero.
Para cada objeto, luego agregamos los días del período y esperamos obtener la suma para cada uno.
Finalmente, usamos Object.values() para convertir nuestro mapa en una matriz:
let input = [ { "month": 4, "periodDays": 1, "expected": 5 }, { "month": 5, "periodDays": 10, "expected": 40 }, { "month": 5, "periodDays": 11, "expected": 35 }, { "month": 6, "periodDays": 8, "expected": 20 } ] const result = Object.values(input.reduce((acc, { month, periodDays, expected }) => { acc[month] = acc[month] || { month, periodDays: 0, expected: 0 }; acc[month].periodDays += periodDays; acc[month].expected += expected; return acc; }, {})); console.log('Result:', result) .as-console-wrapper { max-height: 100% !important; }