Я хотел бы получить доступ к PokeAPI, чтобы получить все приемы, изученные конкретным покемоном на уровне 1. На данный момент
Вот мой js-код:
let userPokemonName = "squirtle"
const pokeData = [];
const url = `https://pokeapi.co/api/v2/pokemon/${userPokemonName}`
pokeData.push(fetch(url).then(res => res.json()))
Promise.all(pokeData).then(results => {
console.info(results)
const userPokemonData = results.map(data => ({
name: data.name,
id: data.id,
type: data.types.map(type => type.type.name).join(", "),
moves: data.moves.map(move => {
if (move.version_group_details.level_learned_at === 1) {
return move.move.name
}
}).slice(0, 10).join(', ')
}));
})
На данный момент я просто получаю массив запятых. Массив перемещений - это запятые.
но там должно быть написано ['откат', 'хвост'].
Я пробовал использовать .forEach вместо карты:
moves: data.moves.forEach(move => {
if (move.version_group_details.level_learned_at === 1) {
userPokemonData.push(move.move.name)
}
но это вернулось неопределенное.
Я только что проверил API, и Tail-whip — это ход номер 8, значит, он должен это получить?
вам, вероятно, захочется .filter( ... ).slice(0,10).map( ... ).join(', ')
— логика уже есть в вашем коде, вам просто нужно применить ее соответствующим образом
version_group_details
— это массив из множества элементов из того, что я наблюдал, так что вы не можете просто move.version_group_details.level_learned_at === 1
Определенно не используйте forEach
, если вы хотите, чтобы он что-то вернул.
I just checked the API and tail-whip is move number 8 so it should be getting that?
было бы, если бы move.version_group_details.level_learned_at === 1
... но этого никогда не происходит
Вы можете использовать сокращение следующим образом
let userPokemonName = "squirtle"
const url = `https://pokeapi.co/api/v2/pokemon/${userPokemonName}`
fetch(url)
.then(res => res.json())
.then(userPokemonData => {
//console.info(userPokemonData)
const { name, id, types, moves } = userPokemonData;
console.info(name, id, types);
const movesDetails = moves
.reduce((acc,move) => {
if (move?.version_group_details
?.some(detail => detail.level_learned_at===1)) {
acc.push(move.move.name);
}
return acc;
},[])
console.info(movesDetails);
//).slice(0, 10).join(', ')
});
move.version_group_details.level_learned_at === 1
, вероятно, никогда не бывает верным - по крайней мере, не для первых 10 ходов - что касается использования.forEach
... ну а что такоеuserPokemonData
? что вы возвращаете из этой функции (в показанном вами коде ничего)