es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)];
  }
}, []);
Tags:  ,

Answer

  1. Avatar for 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 el acumulador. La función también debe actualizar el objeto correcto en el acumulador en lugar de agregar un nuevo objeto. Aquí está la función corregida:

    const output = inputArray.reduce((acumulador, elementoActual) => {
      const indice = acumulador.findIndex(item => item.userId === elementoActual.userId);
    
      if (indice < 0) {
        return [...acumulador, elementoActual];
      } else {
        acumulador[indice].sum += elementoActual.sum;
        return acumulador;
      }
    }, []);
    

    Esto devolverá un arreglo de objetos con las propiedades userId y sum sumadas correctamente.

Comments are closed.