如何在这种类型的 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 将是 1。 Math.random() * 1 不会更改原始随机浮点值。将 0-1 之间的值(包括 0 但不包括 1)作为 parseInt() 的参数传递将始终返回 0。 values[0],因此 math 常量将是字符串 "398134753850556416"。
console.log(math)
您实际上总是记录member.id的值!
由于某种原因,它寻找 2 值s 而不是 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
希望能回答你的问题!我还在学习自己,所以其他人,请随时纠正我的错误。