Tengo una matriz de objetos y dentro de esos objetos hay otro objeto que contiene una propiedad particular de la que quiero obtener el valor y almacenar en una matriz separada.
¿Cómo accedo y almaceno el valor de la propiedad de name de la estructura de datos a continuación?
pokemon:Object abilities:Array[2] 0:Object ability:Object name:"blaze" 1:Object ability:Object name:"solar-power" ¿Cómo devolvería y mostraría los valores en la propiedad de name como una buena cadena como
blaze, solar-power ?
Intenté hacer algo como esto, pero todavía obtengo una matriz y no quiero hacer un tercer ciclo ya que no funciona.
let pokemonAbilities = []; let test = pokemon.abilities.map((poke) => Object.fromEntries( Object.entries(poke).map(([a, b]) => [a, Object.values(b)[0]]) ) ); test.map((t) => pokemonAbilities.push(t.ability));Data de muestra:
"pokemon": { "abilities": [ { "ability": { "name": "friend-guard", "url": "https://pokeapi.co/api/v2/ability/132/" }, "ability": { "name": "Solar-flare", "url": "https://pokeapi.co/api/v2/ability/132/" } } ] }Luego estoy haciendo una unión en la matriz devuelta desde arriba para obtener una cadena formateada.
Parece que los múltiples bucles map() se pueden optimizar, pero no estoy seguro de cómo hacerlo más eficiente.
Gracias.
No hay necesidad de un bucle dentro del bucle. Prueba esto:
const pokemon = { abilities: [{ ability: { name: 'friend-guard', url: 'https://pokeapi.co/api/v2/ability/132/' }, }, { ability: { name: 'Solar-flare', url: 'https://pokeapi.co/api/v2/ability/132/' } }] }; const pokemonAbilities = pokemon.abilities.map(item => item.ability.name).join(', '); console.log(pokemonAbilities);