【问题标题】:Random ID values from the array数组中的随机 ID 值
【发布时间】:2020-04-29 17:29:08
【问题描述】:

如何在这种类型的 JSON 数组中随机选择一个 ID?

{
    "398134753850556416": {"id": "398134753850556416"},
    "398134757854556416": {"id": "398134757854556416"}
}

我尝试这样实现它:

const id1 = require("./json/id.json");

const values = Object.values(id1[member.id]) 
const math = values[parseInt(Math.random() * values.length)]
console.log(math)

错误:
出于某种原因,它会查找 2 个值而不是 1 个。
如果第一个被删除了,就会报错,就好像什么都没有了。

【问题讨论】:

  • 请包括准确的错误信息。您可以在行首添加> 以提供错误消息“引号”格式。
  • 是嵌套问题吗?另外,你怎么知道它正在寻找 2 值?我也不清楚member (member.id) 是在哪里定义的。
  • 能否请您出示./json/id.json的相关代码。

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


【解决方案1】:

如何在这种类型的 JSON array 中随机选择一个 ID? { “398134753850556416”:{“id”:“398134753850556416”}, “398134757854556416”:{“id”:“398134757854556416”} }

我相信这是一个对象,而不是一个数组。

我假设您发布的代码块是您的 ./json/id.json 文件中的内容,并且 member.id 是像 "398134753850556416" 这样的有效密钥。让我们看看你的代码:

const id1 = require("./json/id.json");

id1 将是对象{ "398134753850556416": {"id": "398134753850556416"}, "398134757854556416": {"id": "398134757854556416"} }

const values = Object.values(id1[member.id])

id["398134753850556416"] 将是对象{"id": "398134753850556416"}。将该对象作为Object.values() 的参数传递,values 常量将是数组["398134753850556416"]

const math = values[parseInt(Math.random() * values.length)]

values.length 将是 1Math.random() * 1 不会更改原始随机浮点值。将 0-1 之间的值(包括 0 但不包括 1)作为 parseInt() 的参数传递将始终返回 0values[0],因此 math 常量将是字符串 "398134753850556416"

console.log(math)

您实际上总是记录member.id的值

由于某种原因,它寻找 2s 而不是 1

我假设您的意思是它始终记录 1 值,而不是在 JSON 文件中的 2 值之间随机选择。嗯,这种行为确实符合您当前代码最终应该做的事情。

如果第一个被删除了,就报错了,好像没有别的了。

读到这里,我认为member.id 确实是"398134753850556416”,因此,删除使用该字符串作为其键的 JSON 文件(第一个键值对)的第 2 行会导致问题,因为您这样做了本质上是在你的代码中调用id1["398134753850556416"]

好的。那么,你如何得到你想要的行为呢?我将假设您的主要 JSON 对象属性的每个 object 值的 .id 与该 object 的键相同,就像在你给的代码块。即{ “same”: {“id”: “same”}, ... }

let objectFromJsonFile = require("./json/id.json"); // This would be { "398134753850556416": {"id": "398134753850556416"}, "398134757854556416": {"id": "398134757854556416"} }
let arrayOfKeys = Object.keys(objectFromJsonFile); // This would be ["398134753850556416", "398134757854556416"]
let randomKey = arrayOfKeys[
    Math.floor(
        Math.random() * arrayOfKeys.length
    )
]; // Aka random ID

希望能回答你的问题!我还在学习自己,所以其他人,请随时纠正我的错误。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多