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

How to choose a random string out of an array?

我想从字符串数组中随机选择一个词,但不知道如何选择。

我已经对此进行了研究,这是我目前所了解的:

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;

我复制了代码,所以水果是占位符。希望每次输出roast都能得到不同的水果

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

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

这确实有效。 但是你为什么导出它?

适合我。使用您在示例中定义的导出,可以像下面这样完成导入,例如。

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

如果只是简单地导出字符串而不是包含字符串的对象,也可以按如下方式进行:

module.exports = roast;
...

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

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

编辑:我刚刚从您发布的评论中注意到,您可能正在寻找一种解决方案,在聊天协议中每次需要烘焙机时,您都可以得到一个新的随机烘焙。为此,我的建议是导出一个 returns 随机烤字符串的函数。请参见下面的示例,我还扩展了 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())
}

这里的问题是模块代码只会运行一次,这意味着第一次加载模块时只会选择一个"roast"。您想将 "roast" 选择逻辑包装在一个函数中,每次您想要 "roast" 某人时都可以调用该函数。

考虑 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()}`);