首页 > 解决方案 > 循环没有在所有 JSON 数据集上迭代

问题描述

在 JSON 数据集中,循环仅在第一个 pokemon 上进行迭代,即仅适用于 Bulbasaur。如果您输入任何其他口袋妖怪的名称,它会显示“未找到”。如果您输入“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)

标签: javascriptjson

解决方案


您的代码非常嵌套和复杂。就个人而言,我会使用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 数据口袋妖怪名称转换为小写(string.toLowerCase() )可能更好。


推荐阅读