[英]get random item from javascript array repeatedly?
我正在制作一個 Discord.js 機器人,機器人的功能之一是當用戶鍵入“!事實”時從 Javascript 事實數組中返回一個隨機項目。 其他用戶已經問了很多這個問題,我使用了給他們答案的代碼,但我遇到了一個問題:機器人“卡住”在一個事實上,並且每次都不會隨機瀏覽列表“!事實”被輸入。 這是我到目前為止的代碼示例:
var facts = [ "Fact 1", "Fact 2", "Fact 3", "Fact 4" ]
var fact = Math.floor(Math.random() * facts.length);
然后,讓機器人發送消息:
client.on('message', message => {
if (message.content === "!fact") {
message.channel.send(facts[fact]);
console.log('Message sent');
}
});
但這只會一遍又一遍地返回類似Fact 1
,無論“!fact”輸入多少次。 我怎樣才能讓它每次都改變?
您只需在啟動時使用此行確定一次隨機事實:
var fact = Math.floor(Math.random() * facts.length);
要在每次 if 條件評估為 true 時獲得隨機事實,您需要為其中的事實重新分配一個新的隨機整數:
client.on('message', message => {
if (message.content === "!fact") {
fact = Math.floor(Math.random() * facts.length);
message.channel.send(facts[fact]);
console.log('Message sent');
}
});
Math.random() 返回一個介於 0 和 1 之間的浮點值,因此將這個數字乘以一個整數,不需要(幾乎從不)返回一個整數,這實際上是您需要遍歷數組的內容。
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Math/random
Math.random() 函數返回范圍為 0 到小於 1(包括 0,但不包括 1)的浮點偽隨機數,在該范圍內分布大致均勻 - 然后您可以縮放到您想要的范圍。 實現選擇初始種子給隨機數生成算法; 它不能由用戶選擇或重置。
要解決此問題,您通常可以使用 Math.round() 或 Math.floor。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
Math.floor() 函數返回小於或等於給定數字的最大整數。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
Math.round() 函數返回四舍五入到最接近的整數的數字的值。
由於您需要限制您的facts.length范圍,您可以使用Math.floor,因為數組的索引從0開始,因此永遠不會獲得長度值,換句話說,最后一個事實的索引等於(facts .長度 - 1)。
client.on('message', message => { if (message.content === "!fact") { const factIndex = Math.floor(Math.random() * facts.length); const fact = facts[factIndex] message.channel.send(fact); console.log('Message sent'); } });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.