簡體   English   中英

重復從javascript數組中獲取隨機項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM