Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!