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

125
Views
¿Cómo obtener la suma de todos los campos con el mismo nombre en una matriz anidada?

Estoy tratando de encontrar la suma de todos los valores de campo de la matriz anidada, apesto explicando cosas como esta, espero que el código a continuación le brinde una idea de lo que quiero hacer.

La matriz se ve así

 data = [ { id: 8434, name: listName, data: [ {name: "a name", quantity: 20, } {name: "another name", quantity: 40, } {name: "another new name", quantity: 40, } ] }, { id: 54343, name: "new list name", data: [ {name: "a name", quantity: 12, } {name: "another name", quantity: 10, } {name: "another new name", quantity: 16, } ] } ]

Así quiero que queden los datos después de realizar la suma

 transformed = [ {name: "a name", quantity: 32}, {name: "another name", quantity: 50}, {name: "another new name", quantity: 56} ]
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede usar Array.flatMap() seguido de Array.reduce() para obtener el resultado deseado.

Comenzamos llamando a .flatMap() para obtener todos los valores de datos, luego llamamos a .reduce() en estos para sumar cada valor por name .

Esto creará un objeto, con una propiedad para cada nombre, luego llamamos a Object.values() para volver a una matriz.

 const data = [ { id: 8434, name: 'listName', data: [ { name: "a name", quantity: 20, }, { name: "another name", quantity: 40, }, { name: "another new name", quantity: 40, } ] }, { id: 54343, name: "new list name", data: [ { name: "a name", quantity: 12, }, { name: "another name", quantity: 10, }, { name: "another new name", quantity: 16, } ] } ]; const transformed = Object.values(data.flatMap(({ data }) => data).reduce((acc, { name , quantity }) => { acc[name] = acc[name] || { name, quantity: 0 }; acc[name].quantity += quantity; return acc; }, {})) console.log('Transformed:', transformed)
 .as-console-wrapper { max-height: 100% !important; }

about 4 years ago · Juan Pablo Isaza Report

0

const transform = (data) => { const quantitySum = new Map() data.forEach(list => { list.data.forEach(({ name, quantity }) => { if (quantitySum.has(name)) { quantitySum.set(name, quantitySum.get(name) + quantity) } else { quantitySum.set(name, quantity) } }) }) return Array.from(quantitySum.entries()) .map(([name, sum]) => ({ name, quantity: sum })) }
about 4 years ago · Juan Pablo Isaza Report

0

simplemente recíbalos y cree un nuevo objeto.

 const data = [ { id: 8434, name: 'listName', data: [ { name: "a name", quantity: 20, }, { name: "another name", quantity: 40, }, { name: "another new name", quantity: 40, } ] }, { id: 54343, name: "new list name", data: [ { name: "a name", quantity: 12, }, { name: "another name", quantity: 10, }, { name: "another new name", quantity: 16, } ] } ] // Logic: const transformed = [] data.forEach(d => { d.data.forEach(item => { const exist = transformed.find(t => t.name == item.name) if(exist) exist.quantity += item.quantity else transformed.push(item) }) }) console.log(transformed)

Producción:

 [ { name: 'a name', quantity: 32 }, { name: 'another name', quantity: 50 }, { name: 'another new name', quantity: 56 } ]
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!