在 JSON 数据集中,循环仅在第一个神奇宝贝上进行迭代,即仅适用于妙蛙种子。如果您输入任何其他神奇宝贝的名称,它会显示“未找到”。如果您输入“Ivysaur”或任何其他神奇宝贝名称(例如“Venusaur”),它不会显示。查看下面我的代码。
let findpokemongame = {https://raw.githubusercontent.com/Biuni/PokemonGO-Pokedex/master/pokedex.json} //click the link to find the JSON dataset
var findname = window.prompt("Enter Pokemon Name")
let checkname = function(findname, findpokemongame) {
for (let thispokemon in findpokemongame.pokemon) {
if (findpokemongame.pokemon[thispokemon].name == findname) {
let pokemondetails = findpokemongame.pokemon[thispokemon];
console.log(pokemondetails);
for (info in pokemondetails) {
if (typeof pokemondetails[info][0] === 'object') {
pokemondetails[info] = pokemondetails[info].map(o => o.name)
}
alert(info + " : " + pokemondetails[info] + "\n")
}
}
else{
alert('Not found');
break;
}
}
}
checkname(findname, findpokemongame)
最佳答案
您的代码非常嵌套且复杂。就我个人而言,我会使用 array.find找到神奇宝贝并简化代码。一旦找到它,您就可以对其进行其他(单独的)操作,希望任何错误都会变得明显:
const foundPokemon = findpokemongame.pokemon.find(pokemon => pokemon.name === findname);
// check foundPokemon
if (foundPokemon) {
// once found extract any details..
} else {
// pokemon name not found
}
你们如何处理名字大小写?在比较之前,最好将用户输入和 json 数据 Pokemon 名称都转换为小写 ( string.toLowerCase() )。
关于javascript - 循环并未对所有 JSON 数据集进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318102/