Quiero hacer algo realmente similar para reduce valores de mi matriz, pero no quiero resumirlo todo en un solo valor. Quiero continuar con el valor resumido e insertar el incremento en cada valor consecutivo en la matriz.
Como esto:
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }] // Do something like this const newArray = array.reduce((accumulated, item) => { return { number: (100 / item.number) + accumulated.value || 0, value: ((100 / item.number) + accumulated.value || 0) * item.value } }, 0) // But the result should be something like this newArray = [{ number: 6, value: 10 }, { number: 30, value: 360 }, { ...and so on }]¿Cómo se puede lograr esto? Se prefiere ES6 con/sin lodash.
Dado que los elementos de entrada y salida son uno a uno, creo que usar .map sería más intuitivo que .reduce : puede mantener una variable externa para el último objeto devuelto.
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }] let lastReturn = array.shift(); const newArray = [lastReturn].concat(array.map(({ number, value }) => { const newObj = { number: (100 / number) + lastReturn.value || 0, value: ((100 / number) + lastReturn.value || 0) * value }; lastReturn = newObj; return newObj; })); console.log(newArray); Si bien sería técnicamente posible usar .reduce para esto (puede usar .reduce para lograr cualquier cosa relacionada con la iteración de matrices, .map tiene más sentido aquí.