为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 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 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信