如何在javascript中显示对象数组中对象的所有属性?

时间:2018-03-03 12:51:10

标签: javascript json

我是javascript的新手。我一直致力于一个程序,我在javascript中使用json数据集,将其分配给变量。数据集的链接如下。 https://raw.githubusercontent.com/Biuni/PokemonGO-Pokedex/master/pokedex.json

我必须编写一个函数,我将一个小精灵的名字作为输入并显示其所有细节。下面是我使用的函数。

var list=pokeDex.pokemon;
var name=prompt("Enter the name of a pokemon");
// Function  taking pokemon’s name as argument and displaying the 
information of that pokemon.
function displayInfo(name)
 {
  for(var items in list)
  {
   if (name==list[items].name)
   {
   console.log(list[items]);
   break;
    }

    else
    {
    //alert("error");

    }
   }
  }

只有当else块中的alert语句是注释时,该函数似乎才对列表中的所有pokemons正常工作。否则该函数会显示除数据集中第一个之外的所有pokemons的错误。

2 个答案:

答案 0 :(得分:0)

您可以轻松地将您的逻辑简化为

function displayInfo(searchName)
 {
  const filteredList = list.filter(poke => poke.name==searchName)
   if (filteredList > 0)
   {
   console.log(filteredList[0]);
    }
    else
    {
    alert("error");
    }
  }

这将首先遍历列表并使用pokemon

搜索searchName

在你的代码中,如果第一个不是searchPokemon ieelse块而没有搜索剩余的列表,它会尝试给出错误警告。

答案 1 :(得分:0)

通过按名称过滤来简化你的逻辑,有一些高阶函数,如filter,它们遍历数组并获得一个返回true的函数,在这种情况下,条件就是口袋妖怪名称。此外,在匹配字符串时,无论大写字母还是小写字母都应用小写来匹配,这很有意思

代码可能如下所示:

const list = pokeDex.pokemon
const inputName = prompt("Enter the name of a pokemon")
const [ pokemonSelected ] = list.filter(pokemon => pokemon.name.toLowerCase() === inputName.toLowerCase())
console.log(pokemonSelected)

我为你做了一个小JSfiddle:https://jsfiddle.net/t8uep0ga/10/ 打开你的控制台并检查console.log()!希望它有所帮助!