Tengo un dato como este:
const fund = [ { id: 1234, totalAmount: 0, data: [ { id: 1234, amount: '4.000' }, { id: 1234, amount: '3.000' } ] }, { id: 12345, totalAmount: 0 }, { id: 123456, totalAmount: 0 data: [ { id: 123456, amount: '3.000' }, { id: 123456, amount: '5.000' } ] } ] Quiero sumar la amount dentro de data de cada ID a una clave llamada totalAmount . Pero no todas las id de los padres tienen una clave data .
aquí está mi resultado deseado:
const fund = [ { id: 1234 data: [ { id: 1234, amount: '4.000' }, { id: 1234, amount: '3.000' } ], totalAmount: 7000 }, { id: 12345, totalAmount: 0 }, { id: 123456, data: [ { id: 123456, amount: '3.000' }, { id: 123456, amount: '5.000' } ], totalAmount: 8000 } ]Estaba intentando con este código:
fund.forEach((elA, i) => { if (elA.data) { const total = funders[i].data.reduce((acc, curr) => { acc += parseInt(curr.amount.replace(/\./g, '')) return acc }) fund[i] = total ? {...elA, totalAmount: total} : elA; } })Pero no está sumando como yo quiero.
¿Dónde está mi error?
Pregúnteme si necesita más información si aún no es suficiente para resolver ese caso.
Debe definir el valor inicial para el iterador de reducción .
fund.forEach((elA, i) => { if (elA.data) { const total = funders[i].data.reduce((acc, curr) => { acc += parseInt(curr.amount.replace(/\./g, '')) return acc }, 0) fund[i] = total ? {...elA, totalAmount: total} : elA; } });Otra alternativa para el mismo código:
fund.forEach(elA => { if (elA.data) { const total = elA.data.reduce((acc, curr) => { return acc + parseInt(curr.amount.replace(/\./g, '')) }, 0) elA.totalAmount = total; } });