生成10个唯一的随机整数

时间:2018-08-20 05:18:58

标签: javascript jquery

我正在处理一个将1-10的10个唯一随机整数添加到数组的循环,所以预期结果将是2,1,4,6,10,7,9,8,5,3我设法生成随机数并且仅添加唯一的数字,这是我的问题是,它没有完成10个项目,我认为问题出在检查后,它不会再次生成。

希望你能帮助我。

谢谢。

for (let i = 0; i < 10; i++) {
  var arrNum = [];
  setTimeout(function() {
    var r = Math.floor(Math.random() * 10) + 1;
    while (arrNum.includes(r) == false) {
      arrNum.push(r);
    }
    if (i == 9) {
      $('ul').append('<li>' + arrNum + '</li>');
    }
  }, 500);
}
ul li{
  list-style-type: none;
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>

3 个答案:

答案 0 :(得分:2)

  while (arrNum.includes(r) == false) {
   arrNum.push(r);
 }

只要不存在,就会添加该数字,因此它将只运行一次,如果该数字已经存在,则不会生成新的数字,您需要:

   const result = [];
   for(let i = 1; i <= 10; i++) {
       let random;
       do {
         random = 1 + Math.floor(Math.random() * 10);
      } while(result.includes(random));
      result.push(random);
  }

但是,仅用1到10的数字进行随机排列可能更容易。

答案 1 :(得分:1)

您的代码有误。 i不是检查10次出现的理想方法,因为即使变量r不满足您的条件arrNum.includes(r) == false,它也会增加。

应按数组长度进行检查。

用您的代码中的if (i == 9)替换if(arrNum.length = 10)

答案 2 :(得分:1)

创建一个数字从1到N(第一行)的数组。在您的情况下,将N替换为10。然后将其随机排序。

class AlbumFilter(filters.FilterSet):
    album = filters.NumberFilter(name='id')

    class Meta:
        model = Album
        fields = '__all__'