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.

Utilizando reduce dentro de map

Cada vez que intento usar reduce dentro de una función map, obtengo el error ‘reduce no es una función’.

Tengo un array en el que estoy mapeando a través de 2 claves. Fecha y cantidad. A continuación se muestra el array con objetos.

Dentro de este mapeo, me gustaría reducir los valores con la misma fecha.

Este es el código que está dando el error. No estoy seguro de por qué la función reduce no está funcionando. ¡Espero que puedas ayudarme. Gracias!

const summedDividend = dividendArrayFiltered.map(({ date, amount }) => {
    const grouped = date.reduce(
      (a, d, i) => a.set(d, (a.get(d) ?? 0) + amount[i]),
      new Map()
    );

return {
  date: [...grouped.keys()],
  amount: [...grouped.values()],
};
});
Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la que está recibiendo el error ‘reduce no es una función’ es porque está intentando llamar al método reduce en la variable date, que es una cadena y no un array.

    Para agrupar los objetos por fecha y calcular la suma de sus cantidades, puede usar el método reduce en lugar del método map en el array dividendArrayFiltered, de esta manera:

    const groupedByDate = dividendArrayFiltered.reduce((acc, { date, amount }) => {
      if (acc[date]) {
        acc[date] += amount;
      } else {
        acc[date] = amount;
      }
      return acc;
    }, {});
    
    const summedDividend = Object.entries(groupedByDate).map(([date, amount]) => ({
      date,
      amount,
    }));
    

    Este código primero usa reduce para agrupar los objetos por fecha y sumar las cantidades para cada fecha. El resultado es un objeto donde las claves son las fechas y los valores son las sumas de cantidades.

    Luego, se usa Object.entries para obtener una matriz de pares [clave, valor], que luego se asigna para crear una matriz de objetos con las claves date y amount. La clave date es la cadena de fecha y la clave amount es la suma correspondiente del objeto groupedByDate.

    ¡Espero que esto ayude!

Comments are closed.