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

124
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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