从数组中获取随机数,不重复(带定时器)

您好,感谢您阅读这篇文章。


我正在尝试创建一个自动 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]);

}


饮歌长啸
浏览 110回答 3
3回答

眼眸繁星

问题在于,一旦拼接数组,您就不会修改 'i' 变量。例如,您的阵列最终可能会变成nums = ["one","two","three","four","ten"]虽然你的 'i' 仍然是 10,所以 'j' 可以获得对你的数组来说太大的值,从而导致你未定义。为了解决这个问题,让 'i' 获得新的数组长度或在函数结束时将其减少 1

喵喵时光机

我希望这会帮助你 :)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]);      }   }

千巷猫影

首先 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]);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript