如何从数组中选择随机字符串?

时间:2019-04-04 23:22:01

标签: node.js discord.js

我正在尝试从字符串数组中选择一个随机词,但不知道如何做。

我对此进行了研究,到目前为止,这是我的研究

roast.js
const roastList = [
    'Apples',
    'Bananas',
    'Pears',
  ];

  const roast = roastList[Math.floor(Math.random() * roastList.length)];

module.exports = {
    roast
};
index.js:
case 'roast':
        if (!message.mentions.users.size) {
            return message.reply('you need to tag a user in order to roast them!');
        }

        message.channel.send(`Hey ${taggedUser}, ${roast}`);
        break;

我复制了代码,因此果实是占位符。我希望每次输出烤肉时都能得到不同的水果。

3 个答案:

答案 0 :(得分:1)

为我工作。例如,使用您在示例中定义的导出,可以完成导入,如下所示。

const roast = require('./roast').roast;

如果仅导出字符串而不是包含字符串的对象,则还可以执行以下操作:

module.exports = roast;
...

const roast = require('./roast');

另请参阅我的repl.it进行演示

编辑:我刚刚从您发布的评论中注意到,您可能正在寻找一种解决方案,每次在聊天协议中需要烘焙时,您都可以获取一个新的随机烘焙。为此,我的建议是导出一个返回随机烘烤字符串的函数。参见下面的示例,我还扩展了repl.it演示。

roast3.js

const roastList = [
    'Apples',
    'Bananas',
    'Pears',
  ];

function roast() {
  return roastList[Math.floor(Math.random() * roastList.length)]
}

module.exports = {
  roast
};

index.js

const roast3 = require('./roast3').roast;
for (x=0; x<10; x++) {
  console.log(roast3())
}

答案 1 :(得分:1)

这里的问题是模块代码将仅运行一次,这意味着在第一次加载模块时将仅选择一个“烘烤”。您希望将“烘烤”选择逻辑包装在一个函数中,每次要“烘烤”某人时都可以调用该函数。

考虑使roast.js导出函数:

const roastList = [
    'Apples',
    'Bananas',
    'Pears'
];

module.exports = function () {
    return roastList[Math.floor(Math.random() * roastList.length)];
};

然后在您的模板中调用该函数:

const roast = require('./roast.js');
...
message.channel.send(`Hey ${taggedUser}, ${roast()}`);

答案 2 :(得分:0)

const roastList = [
  'Apples',
  'Bananas',
  'Pears',
];

const roast = roastList[Math.floor(Math.random() * roastList.length)];
console.log(roast);

这实际上有效。 但是为什么要出口呢?