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

135
Vistas
Cómo fusionar una matriz anidada de objetos en javascript con una forma específica

Estoy tratando de fusionar una matriz de objetos sumando los totales de cada par clave-valor en el objeto de totales. Por ejemplo, la siguiente matriz produciría un objeto con un totals de 3 manzanas y 5 naranjas. Esto debe ser dinámico. Si las peras fueran una clave en otro objeto, el objeto resultante incluiría tres claves debajo del objeto de totals : manzanas, naranjas y peras.

Entrada de muestra:

 [ { summary: { totals: { apples: 2, oranges: 3 } } }, { summary: { totals: { apples: 1, oranges: 2 } } } ]

Rendimiento esperado:

 { summary:{ totals:{ apples:3, oranges:5 } } }

Lo que he probado:

 function mergeObjects(arr) { let shape = { summary:{ totals:{} } } return arr.reduce((prev, cur) => { if(cur.summary.totals.apples){ shape.summary.totals.apples.push(cur.summary.totals.apples) } }, shape); }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

  • Usando Array#reduce , itere sobre la matriz mientras actualiza un objeto
  • En cada iteración, usando Object#entries y , itere sobre los pares de totales actuales y actualice el acumulador.

 const arr = [ { summary: { totals: { apples: 2, oranges: 3 } } }, { summary: { totals: { apples: 1, oranges: 2 } } }, ]; const res = arr.reduce((map, current) => { const { totals: currentTotals = {} } = current.summary ?? {}; const { totals } = map.summary; Object.entries(currentTotals).forEach(([ key, value ]) => { totals[key] = (totals[key] ?? 0) + value; }); return map; }, { summary: { totals: {} } }); console.log(res);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes intentar algo como. Simplemente recorra la matriz y sume manzanas y naranjas.

 const arr = [ { summary: { totals: { apples: 2, oranges: 3, }, }, }, { summary: { totals: { apples: 1, oranges: 2, }, }, }, ]; function mergeObjects(arr) { let shape = { summary:{ totals:{ apples:0, oranges:0 } } } arr.forEach(x => { if(x.summary.totals.apples){ shape.summary.totals.apples += x.summary.totals.apples; shape.summary.totals.oranges += x.summary.totals.oranges; } }); return shape; } let result = mergeObjects(arr); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

La segunda opción de la función reduce inicializa el valor.

¡Y el valor inicializado se puede usar en anterior!

[1] almacenar el valor en anterior.

[2] anterior puede acumular valores. Tienes que volver a utilizar el valor acumulado. Si no se devuelve, el valor será indefinido.

[3] apples no es un tipo de matriz, por lo que no puede usar el método push. es un tipo de número, debe usar un operador numérico.

 function mergeObjects(arr) { const shape = { summary: { totals: {}, }, }; return arr.reduce((prev, cur) => { const { apples, oranges } = cur.summary.totals; // [1] prev.summary.totals.apples // [3] ? (prev.summary.totals.apples += apples) : (prev.summary.totals.apples = apples); prev.summary.totals.oranges ? (prev.summary.totals.oranges += oranges) : (prev.summary.totals.oranges = oranges); // [2] return prev; }, shape); }

¡puntas!

  1. Usar asignación de desestructuración
 const { apples, oranges } = cur.summary.totals;
  1. Usar operador ternario
 prev.summary.totals.apples ? (prev.summary.totals.apples += apples) : (prev.summary.totals.apples = apples);
  • ¡Haz que el código se vea bien!
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