首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pokemon JSON If语句问题

Pokemon JSON If语句问题
EN

Stack Overflow用户
提问于 2018-05-08 02:15:50
回答 3查看 60关注 0票数 0

因此,我目前正在与PokeAPI合作,以制作一个功能性的Pokedex。精灵可以有1+类型,所以我写了一个if语句,通过使用hasOwnProperty选择器来处理这种可能性。

代码语言:javascript
复制
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对象的一个示例:

代码语言:javascript
复制
"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"
        }
    }
]
EN

回答 3

Stack Overflow用户

发布于 2018-05-08 02:36:34

归功于Calvin Nunes

当types对象中有数量可变的类型时,与其使用hasOwnProperty()不起作用,使用if (data.types.length > 1){}检查是否有1个以上的类型会更容易。

票数 1
EN

Stack Overflow用户

发布于 2018-05-08 02:43:39

您可能想要使用map,它可以非常容易地将对象数组转换为名称数组。您可以只使用下面的命令:'Types: ' + data.types.map(t => t.type.name).join(', ')来获取要添加到HTML中的代码片段。这比摆弄lengths或hasOwnProperty简单得多。

代码语言:javascript
复制
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(', ')
})
代码语言:javascript
复制
<p id="types">(empty until you click "Run")</p>
<button id="run">Run</button>

当您单击该代码片段中的按钮时,将映射数据以获取名称,并将这些名称连接到预期的字符串中。现在,如果您的数组有三个元素,或者17个元素,这将继续工作。

票数 1
EN

Stack Overflow用户

发布于 2018-05-08 02:19:01

您正在检查data.hasOwnProperty的字符串

我想这可能对你有用:

代码语言:javascript
复制
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"。希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50220212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档