簡體   English   中英

如何在 JavaScript 中獲取隨機列表項

[英]How to get a random list item in JavaScript

我正在使用 discord.py 制作一個 Discord 機器人,每 24 小時為您提供一次補充。 為了測試,我將計時器設置為 1 秒。 我制作的代碼如下所示:

const Discord = require('discord.js')
const client = new Discord.Client()

const complements = [
    ...
]

client.once('ready', () => {
    console.log('Logged in!');
    client.user.setActivity("with nice complements.")
    setInterval(console.log,1000,complements[Math.floor(Math.random() * (complements.length - 1))]);
});

但是,這只是每次都返回相同的補碼。 有什么方法可以選擇隨機補碼?

您傳遞給setInterval的參數在您將它們傳遞給setInterval function 時進行評估,而不是在每次執行時進行評估。

所以這個: setInterval(console.log,1000,complements[Math.floor(Math.random() * (complements.length - 1))]);

等於:

let complement = complements[Math.floor(Math.random() * (complements.length - 1))];
setInterval(console.log,1000, complement);

您需要將 callbnack function 傳遞給執行的setInterval ,然后將您隨機訪問那里。

setInterval(() => {
   console.log(complements[Math.floor(Math.random() * (complements.length - 1))])
}, 1000)

嘗試像這樣使用setInterval

setInterval(() => {
  const value = complements[Math.floor(Math.random() * (complements.length - 1))];
  console.log(value);
},1000);

與其在每次迭代中向console.log傳遞一個固定參數(實際上我之前從未見過setInterval調用超過 2 個參數並且不得不查找它的含義:-)),而是傳遞一個 function ,它在調用時會生成一個新的隨機值並將其傳遞給console.log

 setInterval(() => {
    const complement = complements[Math.floor(Math.random() * (complements.length - 1)) ] ;
    console.log(complement);
 }, 1000)

問題是setInterval。 他調用 function 得到相同的結果。 試試看並檢查控制台

 let x = setInterval(console.log(Math.random()),1000,); let num = 0; let y = setInterval(() => { console.log(num) num += 1 },1000,);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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