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

175
Visualizações
¿Cómo agregar la suma del valor del objeto y fusionar el objeto de matriz?

Tengo una matriz con objetos anidados, quiero agregar una suma de valor y crear un objeto en javascript.

 const arr = [ { preliminary: { contract_value: 1000, planned_value: 500, balance_value: 500, }, substructure: { contract_value: 1000, planned_value: 500, balance_value: 500, }, superstructure: { contract_value: 1000, planned_value: 500, balance_value: 500, }, architectural: { contract_value: 1000, planned_value: 500, balance_value: 500, }, mande: { contract_value: 1000, planned_value: 500, balance_value: 500, }, externalwork: { contract_value: 1000, planned_value: 500, balance_value: 500, }, miscorcontingency: { contract_value: 1000, planned_value: 500, balance_value: 500, }, }, { preliminary: { contract_value: 100, planned_value: 50, balance_value: 50, }, substructure: { contract_value: 100, planned_value: 50, balance_value: 50, }, superstructure: { contract_value: 100, planned_value: 50, balance_value: 50, }, architectural: { contract_value: 100, planned_value: 50, balance_value: 50, }, mande: { contract_value: 100, planned_value: 50, balance_value: 50, }, externalwork: { contract_value: 100, planned_value: 50, balance_value: 50, }, miscorcontingency: { contract_value: 100, planned_value: 50, balance_value: 50, }, },

];

Lo he hecho para un objeto, así que quiero hacer varios objetos.

 const result = arr.reduce( (obj, { preliminary, ...rest }) => { return ( Object.keys(preliminary).map( (key) => (obj.preliminary[key] = preliminary[key] + (Number(obj.preliminary[key]) || 0)) ), obj ); }, { preliminary: {}, substructure: {}, superstructure: {}, architectural: {}, mande: {}, externalwork: {}, miscorcontingency: {}, }

);

consola.log(resultado)

Aquí adjunto el enlace del violín.

Salí puesto por valor "preliminar". Necesito todas las necesidades medias de objetos para hacer dinámicamente. Gracias por adelantado.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Podemos usar Array.reduce() varias veces en combinación con Object.entries() para agregar las propiedades en el nivel correcto en la estructura, el resultado final debería ser el requerido:

 const arr = [ { preliminary: { contract_value: 1000, planned_value: 500, balance_value: 500, }, substructure: { contract_value: 1000, planned_value: 500, balance_value: 500, }, superstructure: { contract_value: 1000, planned_value: 500, balance_value: 500, }, architectural: { contract_value: 1000, planned_value: 500, balance_value: 500, }, mande: { contract_value: 1000, planned_value: 500, balance_value: 500, }, externalwork: { contract_value: 1000, planned_value: 500, balance_value: 500, }, miscorcontingency: { contract_value: 1000, planned_value: 500, balance_value: 500, }, }, { preliminary: { contract_value: 100, planned_value: 50, balance_value: 50, }, substructure: { contract_value: 100, planned_value: 50, balance_value: 50, }, superstructure: { contract_value: 100, planned_value: 50, balance_value: 50, }, architectural: { contract_value: 100, planned_value: 50, balance_value: 50, }, mande: { contract_value: 100, planned_value: 50, balance_value: 50, }, externalwork: { contract_value: 100, planned_value: 50, balance_value: 50, }, miscorcontingency: { contract_value: 100, planned_value: 50, balance_value: 50, }, }] const result = arr.reduce((acc, cur) => { return Object.entries(cur).reduce((acc, [key1, val1]) => { return Object.entries(val1).reduce((acc, [key2, val2]) => { acc[key1] = acc[key1] || {}; acc[key1][key2] = (acc[key1][key2] || 0) + val2; return acc; }, acc) }, acc) }, {}) console.log('Result:',result)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

  • Usando Array#reduce , itere sobre la matriz mientras actualiza un acumulador de objetos
    • En cada iteración, usando Object#keys , itere sobre las claves del objeto en cuestión
      • Establezca prev al valor de la clave guardada en el acumulador si existe, y current al valor en el objeto en cuestión
      • Si no se guardó ningún valor anterior para esta clave en el acumulador, establezca el objeto en él
      • De lo contrario, use Object#keys y Array#forEach , itere sobre sus claves y actualice el acumulador

 const arr = [ { preliminary: { contract_value: 1000, planned_value: 500, balance_value: 500 }, substructure: { contract_value: 1000, planned_value: 500, balance_value: 500 }, superstructure: { contract_value: 1000, planned_value: 500, balance_value: 500 }, architectural: { contract_value: 1000, planned_value: 500, balance_value: 500 }, mande: { contract_value: 1000, planned_value: 500, balance_value: 500 }, externalwork: { contract_value: 1000, planned_value: 500, balance_value: 500 }, miscorcontingency: { contract_value: 1000, planned_value: 500, balance_value: 500 } }, { preliminary: { contract_value: 100, planned_value: 50, balance_value: 50 }, substructure: { contract_value: 100, planned_value: 50, balance_value: 50 }, superstructure: { contract_value: 100, planned_value: 50, balance_value: 50 }, architectural: { contract_value: 100, planned_value: 50, balance_value: 50 }, mande: { contract_value: 100, planned_value: 50, balance_value: 50 }, externalwork: { contract_value: 100, planned_value: 50, balance_value: 50 }, miscorcontingency: { contract_value: 100, planned_value: 50, balance_value: 50 } } ]; const res = arr.reduce((acc, obj) => { Object.keys(obj).forEach(key => { const prev = acc[key], current = obj[key]; if(!prev) acc[key] = current; else Object.keys(current).forEach(k => prev[k] = (prev[k] || 0) + current[k]); }); return acc; }, {}); console.log(res);

about 4 years ago · Juan Pablo Isaza Relatório

0

esta es mi solucion:

 const arr = [ { preliminary: { contract_value: 1000, planned_value: 500, balance_value: 500 }, substructure: { contract_value: 1000, planned_value: 500, balance_value: 500 }, superstructure: { contract_value: 1000, planned_value: 500, balance_value: 500 }, architectural: { contract_value: 1000, planned_value: 500, balance_value: 500 }, mande: { contract_value: 1000, planned_value: 500, balance_value: 500 }, externalwork: { contract_value: 1000, planned_value: 500, balance_value: 500 }, miscorcontingency: { contract_value: 1000, planned_value: 500, balance_value: 500 } }, { preliminary: { contract_value: 100, planned_value: 50, balance_value: 50 }, substructure: { contract_value: 100, planned_value: 50, balance_value: 50 }, superstructure: { contract_value: 100, planned_value: 50, balance_value: 50 }, architectural: { contract_value: 100, planned_value: 50, balance_value: 50 }, mande: { contract_value: 100, planned_value: 50, balance_value: 50 }, externalwork: { contract_value: 100, planned_value: 50, balance_value: 50 }, miscorcontingency: { contract_value: 100, planned_value: 50, balance_value: 50 } } ]; let result = arr.reduce((out, cv, ci)=>{ if(ci == 0) return out; Object.keys(cv).forEach(key => { Object.keys(cv[key]).forEach(key2 => { (out[key] ??= {})[key2] += cv[key][key2]; }) }); return out; }, arr[0] ); console.log(result)

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