javascript - 如何从字典中的数组中调用随机值?(不和谐机器人)
问题描述
我有一本字典,比方说:
var array1 = ["value 1", "value 2", "value 3"];
var array2 = ["value 1", "value 2", "value 3"];
var dict = {"this":array1,"that":array2};
鉴于我选择了一个键,如何从字典中调用数组中的随机值?
例如
dict["this"] // Should return a random value from array rather than all values
我曾尝试使用 Math.random 来获取随机索引号,哪种可行,但是使用它时,它总是返回相同的值,这意味着用于索引的随机数生成器只运行一次并且不会更新,除非我重新启动代码,否则每次都会从数组中给出相同的值。
var array1 = ["value 1", "value 2", "value 3"]; // array1
var array2 = ["value 1", "value 2", "value 3"]; // array2
var randthis = Math.floor(array1.length * Math.random()); // random index for array 1
var randthat = Math.floor(array2.length * Math.random()); // random index for array 2
var dict = {"this":this[randthis],"that":that[randthat]};
msg.client.send(dict[this])
我应该如何做到这一点,以便随机索引每次都会给我一个不同的索引?或者以不同的方式来实现这一点。我知道我可以通过导入 random 和使用 random.choice(dict[this]) 在 Python 中实现这一点
更新:我的字典在与服务器模块不同的模块中,因此同一模块中没有太多代码。所以我从dictionary.js 导出字典并在actualcode.js 中使用它(不要认为这很重要,但要说明它只是为了确保)
更新 2:
server.js:
const Discord = require("discord.js");
const client = new Discord.Client;
const cmd = require("./commands");
client.on("message", msg => {
const prefix = '$'
if (msg.author == client.user){
return
};
if (msg.content.startsWith(prefix)){
var command = msg.content.split(prefix).slice(1);
msg.channel.send(cmd[command+"_cmd"]);
}
});
命令.js:
var array1 = ["value 1", "value 2", "value 3"]
var array2 = ["value 1", "value 2", "value 3"]
var randindex = Math.floor(array1.length * Math.random())
var randindex2 = Math.floor(array2.length * Math.random())
var cmd = {"test_cmd":array1[randindex], "test2_cmd":array2[randindex2]}
module.exports = cmd
解决方案
每次获得相同结果的原因commands.js
仅在您第一次将文件加载到server.js
.
“修复”这个问题的方法是在命令中导出一个函数,并根据需要执行该函数:
function execCmd() {
var array1 = ["value1", "value 2", "value 3"]
var randindex = Math.floor(array1.length * Math.random())
return {"test_cmd":array1[randindex]}
}
module.exports = execCmd;
和
const Discord = require("discord.js");
const client = new Discord.Client;
const cmd = require("./commands");
client.on("message", msg => {
const prefix = '$'
if (msg.author == client.user){
return
};
if (msg.content.startsWith(prefix)){
var command = msg.content.split(prefix).slice(1);
var rndDict = cmd();
msg.channel.send(rndDict[command+"_cmd"]);
}
});
推荐阅读
- python - 比较返回与仅返回 True 或 False 所需的时间
- python - SQLAlchemy 默认日期时间,现在加上 n 天后
- haskell - Haskell 中函数组合的优先级是什么?
- python - 根据列名“合并”两个稀疏矩阵(在单独的列表中)
- javascript - Firebase 函数响应返回 null
- python - 如何计算行值大于熊猫中特定值的数量?
- c++ - 处理桥接模式之间的依赖关系
- python - Python:检查列表中的 n 个元素是否存在于字符串中;任何()和所有()之间的中间立场?
- sql - SQL Group By + Count 与多个表
- java - Hibernate查询真的比SQL更省时间吗?