因此,我目前正在与PokeAPI合作,以制作一个功能性的Pokedex。精灵可以有1+类型,所以我写了一个if语句,通过使用hasOwnProperty选择器来处理这种可能性。
if (data.hasOwnProperty("types[1].type.name")) {
type.innerHTML = "Types: " + data.types[0].type.name + ", " + data.types[1].type.name;
} else {
type.innerHTML = "Type: " + data.types[0].type.name;
}但是,代码似乎不起作用,它默认使用if语句的"else“部分。有人能指出我代码中的错误吗?谢谢!
下面是types对象的一个示例:
"types": [
{
"slot": 2,
"type": {
"url": "https://pokeapi.co/api/v2/type/3/",
"name": "flying"
}
},
{
"slot": 1,
"type": {
"url": "https://pokeapi.co/api/v2/type/10/",
"name": "fire"
}
}
]发布于 2018-05-08 02:36:34
归功于Calvin Nunes
当types对象中有数量可变的类型时,与其使用hasOwnProperty()不起作用,使用if (data.types.length > 1){}检查是否有1个以上的类型会更容易。
发布于 2018-05-08 02:43:39
您可能想要使用map,它可以非常容易地将对象数组转换为名称数组。您可以只使用下面的命令:'Types: ' + data.types.map(t => t.type.name).join(', ')来获取要添加到HTML中的代码片段。这比摆弄lengths或hasOwnProperty简单得多。
const data = {"types": [{"slot": 2, "type": {"name": "flying", "url": "https://pokeapi.co/api/v2/type/3/"}}, {"slot": 1, "type": {"name": "fire", "url": "https://pokeapi.co/api/v2/type/10/"}}]}
const run = document.getElementById('run')
const types = document.getElementById('types')
run.addEventListener('click', evt => {
types.innerHTML = 'Types: ' + data.types.map(t => t.type.name).join(', ')
})<p id="types">(empty until you click "Run")</p>
<button id="run">Run</button>
当您单击该代码片段中的按钮时,将映射数据以获取名称,并将这些名称连接到预期的字符串中。现在,如果您的数组有三个元素,或者17个元素,这将继续工作。
发布于 2018-05-08 02:19:01
您正在检查data.hasOwnProperty的字符串
我想这可能对你有用:
if (data.hasOwnProperty(types[1].type.name)) {
type.innerHTML = "Types: " + data.types[0].type.name + ", " + data.types[1].type.name;
} else {
type.innerHTML = "Type: " + data.types[0].type.name;
}这将检查types[1].type.name的实际值,而不是字符串"types[1].type.name"。希望这能帮上忙。
https://stackoverflow.com/questions/50220212
复制相似问题