亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從數組中獲取隨機數,不重復(帶定時器)

從數組中獲取隨機數,不重復(帶定時器)

飲歌長嘯 2021-11-12 16:41:27
您好,感謝您閱讀這篇文章。我正在嘗試創建一個自動 Bingo call-out-loud 數字游戲,但我一直在控制臺日志中未定義。有任何想法嗎?我有一個數組,這些項目需要隨機調用,不要重復,當完成時停止并說“結束”或“完成”之類的東西。非常感謝!var nums = ["one","two","three","four","five","six","seven","eight","nine","ten"],ranNums = [],i = nums.length,j = 0;setInterval(getNum,2000);function getNum(){  j = Math.floor(Math.random() * (i+1));  ranNums.push(nums[j]);  nums.splice(j,1);  console.log(ranNums[ranNums.length-1]);}
查看完整描述

3 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

問題在于,一旦拼接數組,您就不會修改 'i' 變量。

例如,您的陣列最終可能會變成

nums = ["one","two","three","four","ten"]

雖然你的 'i' 仍然是 10,所以 'j' 可以獲得對你的數組來說太大的值,從而導致你未定義。

為了解決這個問題,讓 'i' 獲得新的數組長度或在函數結束時將其減少 1


查看完整回答
反對 回復 2021-11-12
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

我希望這會幫助你 :)


var nums = ["one","two","three","four","five","six","seven","eight","nine","ten"],

ranNums = [],

j = 0;


intervall = setInterval(getNum,2000);

  function getNum(){

  

    i = nums.length

    

    if(i == 0) {

      clearInterval(intervall)

      console.log('the end')

    } else {

        console.log(i)

        j = Math.floor(Math.random() * (i));

        ranNums.push(nums[j]);

        nums.splice(j,1);

        console.log(ranNums[ranNums.length-1]);

      }

   }


查看完整回答
反對 回復 2021-11-12
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

首先 splice() 方法通過刪除或替換現有的來改變數組的內容。Splice 這就是為什么你沒有定義(因為你修改了初始數組長度。另外,如果你稍微搜索一下,你會發現在兩個值之間獲取一個隨機整數


你也沒有提到你什么時候想停下來。但下面是賓果游戲?。?!


var nums = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"],

  ranNums = [],

  i = nums.length,

  j = 0;




setInterval(getNum2, 2000);


function getNum2() {

  var min = Math.ceil(null); //rounds a number up to the next largest whole number or integer

  var max = Math.floor(nums.length); // returns the largest integer less than or equal to a given number

  var rdNumber = Math.floor(Math.random() * (max - min)) + min;

  // You can set a rult when you want to stop for e.g 

  // if (ranNums.length === 5){ clearInterval(getNum2)}

  ranNums.push(nums[rdNumber]);

  console.log(nums[rdNumber]);


}


查看完整回答
反對 回復 2021-11-12
  • 3 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號