Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda