【问题标题】:API Help How to get last tab in jsonAPI 帮助 如何获取 json 中的最后一个选项卡
【发布时间】:2020-09-27 17:24:50
【问题描述】:

如何获取 json 代码的最后一个选项卡? 例如:

{
  "claimed_levels": {
      "level_1",
      "level_2"
    }
}

我想要得到的是当有人做 !levels

它显示 你的等级是“2”

我尝试使用.length

但它响应为未定义。

【问题讨论】:

  • 正如@prateek3636 指出的,您的JSON 对象无效。 .length 仅适用于 JSON 数组/集合。您在这里都没有使用。

标签: javascript node.js json api discord.js


【解决方案1】:

我认为它不是一个有效的 json 对象。

{
  "claimed_levels": {
     "level_1",
     "level_2"
  }
}

您使用“claimed_levels”作为对象的键,它的值是一个对象,即:

{
  "level_1",
  "level_2"
}

但这不是一个正确的对象,你应该像这样使用数组:

[
  "level_1",
  "level_2"
]

或键值对对象如:

{
  "level_1":"1",
  "level_2":"2"
}

【讨论】:

  • 是的,它是{ "level_1": true, "level_2": true } 但是有没有办法做到这一点?
  • 否,因为.length 是数组/集合的属性。在这种情况下,您可以做的最接近的事情是 Object.keys({"level_1": true, "level_2": true}).length,它会告诉您 JSON 对象中的键数,在本例中为 2。
  • 你必须使用 Object.keys(object).length
【解决方案2】:

这将起作用:

let input = {
    "claimed_levels": {
        "level_1": true,
        "level_2": true
    }
};
let cl = input.claimed_levels;
console.log(Object.keys(cl)[Object.keys(cl).length-1]);

您需要注意“最后”的含义。旧的 JavaScript 规范说你永远不能指望对象键的顺序。虽然情况已经改变,但仍可能取决于实施。具体来说,您可能需要测试“level_10”是否会排在“level_2”之前(按字母顺序)。

【讨论】:

    【解决方案3】:

    .length 发送数组长度。几乎所有的编程语言都从 0 开始索引。然后 [array.length-1] 可以工作。

    【讨论】:

    • 嗨,马赫迪!我想通知您,您需要考虑 array.length 可以为 0 的事实。在这种情况下,array.length - 1 将为 -1,这将导致错误。
    • 这也不是数组
    • 我假设我们将字符串转换为数组
    【解决方案4】:

    如果您尝试获取 JSON 对象的长度,请使用 .size 而不是 .length

    【讨论】:

    • 我试过了,但它仍然给我 undefined claimed_levels.size
    • 您确定您正确引用了 JSON 对象吗?
    • json 对象是` "claimed_levels": { "level_2": true, "level_1": true, "level_3": true, "level_4": true, "level_5": true, "level_6 ": true, "level_7": true `正如你所说,我所做的是claimed_levels.size,但仍然未定义
    • 参考 @prateek3636 提供的解决方案,它包含大量信息。
    • 在哪里可以看到?
    猜你喜欢
    • 2013-07-03
    • 2021-09-29
    • 2017-10-31
    • 1970-01-01
    • 2020-09-17
    • 2012-02-06
    • 1970-01-01
    • 2010-09-23
    • 2012-11-06
    相关资源
    最近更新 更多