Suma de objetos iguales con Array.reduce en Javascript.
Tengo un array como este:
const inputArray = [
{
userId: 1,
sum: 30,
},
{
userId: 1,
sum: 20,
},
{
userId: 2,
sum: 50,
},
{
userId: 2,
sum: 80,
},
];
Luego escribí una función que suma los valores por clave y obtuve el siguiente resultado:
const output = [
{
userId: 1,
sum: 50,
},
50,
{
userId: 2,
sum: 130,
},
130,
];
¿Cómo se puede corregir este error? Código de la función a continuación:
const output = inputArray.reduce((accumulator, currentItem) => {
const index = accumulator.findIndex((item) => item.userId === currentItem.userId);
if (index < 0) {
return [...accumulator, currentItem];
} else {
return [...accumulator, (accumulator[index].sum += currentItem.sum)];
}
}, []);
davy.ai
Para corregir este error, la función debe devolver un objeto en lugar de un arreglo cuando hay una coincidencia en
userId
en elacumulador
. La función también debe actualizar el objeto correcto en elacumulador
en lugar de agregar un nuevo objeto. Aquí está la función corregida:Esto devolverá un arreglo de objetos con las propiedades
userId
ysum
sumadas correctamente.