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

163
Visualizações
Unir y reducir matrices de objetos

Necesito unirme y pedir 2 arreglos, y no lo he logrado.

la primera matriz contiene "categorías" de pokemons

y la segunda matriz contiene pokemons y algunos datos.

Necesito unir ambas matrices, sumar el valor de poder de cada pokemon y mostrarlos de esta manera

Resultado Esperado

 [ {fire: 19000}, { rock: 2100 }, {water: 1500} ]

Primera matriz "categorías o tipos"

 const pokeTypes = [ { uuid: 1, pokemonType: "fire" }, { uuid: 2, pokemonType: "water" }, { uuid: 3, pokemonType: "rock" } ];

2do grupo de pokemons

 const pokemons = [ { name: "geodude", pokemonTypeId: 3, power: 900, }, { name: "onix", pokemonTypeId: 3, power: 1200, }, { name: "squirtle", pokemonTypeId: 2, power: 100, }, { name: "seadra", pokemonTypeId: 2, power: 300, }, { name: "goldeen", pokemonTypeId: 2, power: 1100, }, { name: "charmander", pokemonTypeId: 1, power: 2000, }, { name: "charmeleon", pokemonTypeId: 1, power: 4000, }, { name: "charizard", pokemonTypeId: 1, power: 7000, }, { name: "magmar", pokemonTypeId: 1, power: 6000, }, ];

Empecé a hacer un reductor y pude generar una matriz de objetos agrupados por pokemonTypeId, no pude continuar después de esto...

Lo intenté

 function sortPokemons() { result = pokemons.reduce( (h, pokemons) => Object.assign(h, { [pokemons.pokemonTypeId]: (h[pokemons.pokemonTypeId] || []).concat({ typeId: pokemons.pokemonTypeId, }), }), {} ); console.log(result); } console.log(sortPokemons());

¡Gracias!

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

0

Puede lograr el resultado de manera fácil y eficiente usando Map

 const pokeTypes = [ { uuid: 1, pokemonType: "fire" }, { uuid: 2, pokemonType: "water" }, { uuid: 3, pokemonType: "rock" }, ]; const pokemons = [ { name: "geodude", pokemonTypeId: 3, power: 900, }, { name: "onix", pokemonTypeId: 3, power: 1200, }, { name: "squirtle", pokemonTypeId: 2, power: 100, }, { name: "seadra", pokemonTypeId: 2, power: 300, }, { name: "goldeen", pokemonTypeId: 2, power: 1100, }, { name: "charmander", pokemonTypeId: 1, power: 2000, }, { name: "charmeleon", pokemonTypeId: 1, power: 4000, }, { name: "charizard", pokemonTypeId: 1, power: 7000, }, { name: "magmar", pokemonTypeId: 1, power: 6000, }, ]; const map = new Map(); pokemons.forEach((o) => map.has(o.pokemonTypeId) ? map.set(o.pokemonTypeId, map.get(o.pokemonTypeId) + o.power) : map.set(o.pokemonTypeId, o.power) ); const result = pokeTypes.map((o) => ({ [o.pokemonType]: map.get(o.uuid) })); console.log(result);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Se puede lograr usando una programación inmutable simple: solo use los métodos de matriz map() y reduce() .

 const pokeTypes = [ { uuid: 1, pokemonType: "fire" }, { uuid: 2, pokemonType: "water" }, { uuid: 3, pokemonType: "rock" }, ]; const pokemons = [ { name: "geodude", pokemonTypeId: 3, power: 900, }, { name: "onix", pokemonTypeId: 3, power: 1200, }, { name: "squirtle", pokemonTypeId: 2, power: 100, }, { name: "seadra", pokemonTypeId: 2, power: 300, }, { name: "goldeen", pokemonTypeId: 2, power: 1100, }, { name: "charmander", pokemonTypeId: 1, power: 2000, }, { name: "charmeleon", pokemonTypeId: 1, power: 4000, }, { name: "charizard", pokemonTypeId: 1, power: 7000, }, { name: "magmar", pokemonTypeId: 1, power: 6000, }, ]; const totals = pokeTypes.map(({uuid, pokemonType}) => { const total = pokemons.reduce((acc, {power, pokemonTypeId}) => pokemonTypeId === uuid ? acc + power : acc , 0); return { [pokemonType] : total }; }); console.log(totals);

Y si desea un objeto limpio agradable { fire: 19000, rock: 2100, water: 1500 } , que en mi opinión es más limpio que una matriz, reemplace el .map() con otro .reduce() :

 const totals = pokeTypes.reduce((acc, {uuid, pokemonType}) => { const total = pokemons.reduce((totalAcc, {power, pokemonTypeId})=> pokemonTypeId === uuid ? totalAcc + power : totalAcc , 0); return { ...acc, [pokemonType]: total, } }, {});
about 4 years ago · Juan Pablo Isaza Relatório

0

 const pokeTypes = [ { uuid: 1, pokemonType: "fire" }, { uuid: 2, pokemonType: "water" }, { uuid: 3, pokemonType: "rock" } ]; const pokemons = [ { name: "geodude", pokemonTypeId: 3, power: 900, }, { name: "onix", pokemonTypeId: 3, power: 1200, }, { name: "squirtle", pokemonTypeId: 2, power: 100, }, { name: "seadra", pokemonTypeId: 2, power: 300, }, { name: "goldeen", pokemonTypeId: 2, power: 1100, }, { name: "charmander", pokemonTypeId: 1, power: 2000, }, { name: "charmeleon", pokemonTypeId: 1, power: 4000, }, { name: "charizard", pokemonTypeId: 1, power: 7000, }, { name: "magmar", pokemonTypeId: 1, power: 6000, }, ]; var data = pokeTypes.map(function(type) { var res = {}; res[type.pokemonType] = pokemons.filter((item) => { return item.pokemonTypeId === type.uuid; }).reduce(function(sum, item) { return sum + item.power; }, 0); return res; }); console.log(data);

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