【问题标题】:Loop doesn't find a candidate even though a candidate exists?即使存在候选人,循环也找不到候选人?
【发布时间】:2020-09-29 06:56:19
【问题描述】:

我最近开始开发一个 discord 机器人(使用 discord.js 库)。机器人的目的是在名为 ROBLOX 的游戏中寻找小型服务器。

我已经学习了 ROBLOX api,并且编写了大部分代码。 当我键入命令时,循环会遍历所有服务器,但令我惊讶的是,它没有找到合适的候选者。

这是我的代码的一部分:

        result = api.responseText
        found = false
        number = parseInt(args[0])

        for (var i = 0; i < result.length; i++){
            if(result[i].playing <= number) {
                message.reply("found candidate")
                found = true
            } else {
                if (i == result.length - 1) {
                    message.reply("no candidate found.")
                }
            }
        }

https://i.stack.imgur.com/InEYM.png

图片大致显示了 JSON 的样子。

任何帮助将不胜感激!

【问题讨论】:

  • 哦,开枪!看起来图像没有加载。我将链接 API 本身。 games.roblox.com/v1/games/5208655184/servers/…
  • 弹奏有没有可能是弦乐?你也试过 parseInt 吗?
  • 不,我没有,不过我会尝试。
  • 还有n​​umber的值是多少?
  • 这不起作用,虽然我可能误解了你的意思,这是你的意思吗? for (var i = 0; i

标签: javascript discord.js


【解决方案1】:

主要有两个问题:

  • .responseText 可能是 JSON 编码的字符串,而不是对象。这需要被解析成一个对象。
  • result.data 是包含服务器数据的数组(特定于 Roblox Web API),而不是 result。这需要在三个地方进行更新。

这些可以这样修复:

    result = JSON.parse(api.responseText)
    found = false
    number = parseInt(args[0])

    for (var i = 0; i < result.data.length; i++){
        if(result.data[i].playing <= number) {
            message.reply("found candidate")
            found = true
        } else {
            if (i == result.data.length - 1) {
                message.reply("no candidate found.")
            }
        }
    }

还可能存在一些错误检查,因为 API 可能会返回其他内容,例如错误消息。此外,结果集以分页格式提供,因此可能也需要处理。 (虽然看起来 API 目前正在一次调用中返回完整的服务器集。)如有必要,我将把这些留给另一个问题。

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

尝试使用

const filter = result.filter( (item) => item.playing <= number)
const found  = filter.lenght > 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多