Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

151
Vistas
Cómo sumar la matriz de valores de objeto y asignarlos al nombre de clave relevante

Necesito entender la forma más simple de hacer esto. Tengo una serie de objetos:

 const data = [ { group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50, } } ]

Lo que estoy tratando de obtener es un objeto simple donde su clave es el mes de data. incomes y el valor es la suma de los valores relativos del mes, por lo que el resultado final se ve así:

 const totalIncomes = { "2019-12": 125, "2020-12": 250, "2021-12": 15 }

¿Alguien me lo puede explicar paso a paso, por favor?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

resuelto usando reduce y forEach

Dentro de la función de reducción, estoy ejecutando un forEach en la matriz de claves del objeto/atributo de incomes . Para cada clave que es una fecha, estoy comprobando si el acumulador de la función de reducción contiene un atributo para cada fecha y crea si no. Después de crear el atributo, estoy sumando el valor del atributo de fecha actual.

 const data = [ { group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50, } } ] const totalIncomes = data.reduce((acc,curr)=> { Object.keys(curr.incomes).forEach((key, index) => { if(!acc[key]){ acc[key] = 0; } acc[key]+=curr.incomes[key] }); return acc; },{}) console.log(totalIncomes)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tal vez esta no sea la solución más bonita, pero puede hacerlo así, la función, por supuesto, no es necesaria.

 const data = [ { group: "A", incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15, }, }, { group: "B", incomes: { "2019-12": 25, "2020-12": 50, }, }, ]; getterInformation(data); function getterInformation(object) { let objectWithCalculatedValues = {}; object.forEach((items) => { for (const key in items.incomes) { if (objectWithCalculatedValues[key] === undefined) { objectWithCalculatedValues[key] = 0; } objectWithCalculatedValues[key] += items.incomes[key]; } }); console.log(objectWithCalculatedValues); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Suponiendo que esta información pueda ser útil para los lectores que no puedan obtener la orientación necesaria (debido a varias razones posibles), aquí hay una forma posible de lograr el objetivo (solución):

 const aggregateIncomesByMonth = () => ( data.map(d => Object.entries(d.incomes).map(([k, v]) => ({ key: k, value: v }))).flat().reduce((fin, itm) => ({ ...fin, [itm.key]: (fin[itm.key] || 0) + itm.value }), {}) );

Explicación

  1. Extraiga solo los incomes de la matriz de data
  2. Para cada objeto de income , obtenga el par clave-valor y transfórmelo en otro objeto de la estructura {key: 20yy-mm, value: nn}
  3. Use .flat() para transformar el resultado del paso 2 en una matriz unidimensional
  4. Utilice .reduce para sumar el value de aquellos casos en los que coincida la key (es decir, 20yy-mm).

Fragmento de código

 const data = [{ group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50, } } ]; const aggregateIncomesByMonth = () => ( data.map(d => Object.entries(d.incomes).map(([k, v]) => ({ key: k, value: v }))).flat().reduce((fin, itm) => ({ ...fin, [itm.key]: (fin[itm.key] || 0) + itm.value }), {}) ); console.log(aggregateIncomesByMonth());

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda