我需要制作一个包含15个随机整数的数组。我有一个功能,但不想重复数字

时间:2018-02-04 03:56:38

标签: javascript arrays random repeat

我正在为学校做一个项目。我需要在1&之间生成一个包含15个随机整数的数组。我有一个功能,但我不想重复这些数字。 (例如,如果数字3位于索引0,我不希望它再次出现在数组中。)如果我能得到一些不能重复数字的帮助,那就太棒了。

感谢您的帮助!

var arr;

function genArray() {
    //generates random array
    arr = [];
    for (var i = 0; i < 15; i++) {
        var min = 1;
        var max = 50;
        var arrayValue = Math.floor(Math.random() * (max - min + 1)) + min;
        arr.push(arrayValue);
    }
    arr.sort(function(a, b) {
        return a - b
    });
    console.log(arr);
}

5 个答案:

答案 0 :(得分:0)

在循环中生成一个新的随机数,而数字在数组中。换句话说,只有当新数字不在数组中时才会继续。

var arr;

function genArray() {
  //generates random array
  arr = [];
  for (var i = 0; i < 15; i++) {
    var min = 1;
    var max = 50;
    do
    {
      var arrayValue = Math.floor(Math.random() * (max - min + 1)) + min;
    }while(arr.includes(arrayValue))
    arr.push(arrayValue);
  }
  arr.sort(function(a, b) {
    return a - b
  });
  console.log(arr);
}

genArray();

答案 1 :(得分:0)

你可以创建一个函数来检查数字是否已经在数组中而不是重新生成数字,否则按数组中的数字

var arr;

    function genArray() {
      //generates random array
      arr = [];
      for (var i = 0; i < 15; i++) {
        var min = 1;
        var max = 50;
        var arrayValue = Math.floor(Math.random() * max) + min;
        if(checkno(arrayValue)==true)
           arr.push(arrayValue);
      } 
      arr.sort(function(a, b) {
        return a - b
      });
      console.log(arr);
    }

    function checkno(var no)
    {
    for(var i=0;i<arr.length;i++)
        {
           if(arr[i]==no)
              return false;
           else
              return true;
        }
    }

答案 2 :(得分:0)

替代解决方案涉及Set object,集合只有唯一元素,同一值的多个元素将被忽略。

为此用途实现的set对象的示例:

&#13;
&#13;
var temp = new Set();
while (temp.size < 15) {
  var min = 1;
  var max = 50;
  temp.add(Math.floor(Math.random()*(max-min+1))+min);
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

此方法使用箭头函数,forEachincludes函数。

let LENGTH = 15;
let numbers = new Array(LENGTH).fill();

let findRandomNumber = (i) => {
  let rn;
  while (numbers.includes((rn = Math.floor(Math.random() * 50) + 1))) {}
  numbers[i] = rn;
};

numbers.forEach((_, i) => findRandomNumber(i));
console.log(numbers.sort((a, b) => a - b));
.as-console-wrapper {
  max-height: 100% !important
}

答案 4 :(得分:0)

您无需检查生成的数组并重新生成数字。效率不高。
请查看以下代码段:

$('#input-id').on('filebatchuploadcomplete', function(event, files, extra) {
    //call the ajax function here to query the files that are uploaded
});