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