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

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

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 Denunciar

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 Denunciar

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