有关生成随机数超过随机愤怒数的问题

时间:2015-12-03 07:14:56

标签: javascript jquery

我需要在1到20之间生成30个随机数。我正在使用此代码,但由于循环数大于随机范围(我猜!)这会产生冲突。

  var arr1 = [];
    for (var i = 0; i < 30;) {
      var ran = Math.floor(Math.random() * 20) + 1;
      if ( arr1.indexOf(ran) == -1)
         arr1[i++] = ran;
    }
你可以告诉我为什么会这样,以及如何防止这种情况造成30个随机数?

由于

3 个答案:

答案 0 :(得分:2)

我在这里创造了一个小提琴,看看

https://jsbin.com/kagixi/edit?html,js,output

在第一种情况下,我们通过迭代所有索引来更新值。

var list = new Array(30).fill(0);

list.forEach(function(d, index){
  list[index] = Math.floor(Math.random() * 20) + 1;
});
console.log(list);

另一种方法是将数组初始化为循环,然后简单地创建一个具有相同长度的新数组,或者像我在本例中所做的那样替换现有数组。

var list2 = new Array(30).fill(0);

list2 = list2.map(function(){
  return Math.floor(Math.random() * 20) + 1;
});

答案 1 :(得分:1)

你错过了你陈述的第三个论点。 试试这个:

var arr1 = [];
for (var i = 0; i < 30; i++) {
    arr1[i] = Math.floor(Math.random() * 20) + 1;
}

答案 2 :(得分:0)

您的代码会创建一个无限循环。

您的随机数介于1到20之间,但您希望阵列中有30个。检查行if ( arr1.indexOf(ran) == -1)中的重复项,保证在20次迭代后返回false,从而创建无限循环。