Javascript检查随机数重复

时间:2017-12-12 10:29:57

标签: javascript

我有1到10的随机数和1到10的数组,但缺少8和2.我希望JS能够解决这个问题并将8或2推入数组。 使用Javascript:

var arr = [1, 3, 5, 6, 9, 4, 7, 10];
var num = Math.floor((Math.random() * 10) + 1);
for (i = 0; i < arr.length; i++) {
  while (num == arr[i]) {
    num = Math.floor((Math.random() * 10) + 1);
  }
  arr.push(num);

不幸的是,它确实创建了一个新数字,但与先前的比较数字重复。请帮忙。

4 个答案:

答案 0 :(得分:3)

您可以在该数组中查找缺少的数字并随机选择一个元素:

&#13;
&#13;
var arr = [1, 3, 5, 6, 9, 4, 7, 10];

// Build array of missing numbers
var missingNumbers = [];
for (var i = 1; i <= 10; i++) {
   if (arr.indexOf(i) < 0) {
       missingNumbers.push(i);
   }
}

// Pick one of them at random
var randomNumber = missingNumbers[Math.floor(Math.random() * missingNumbers.length)];

// Push it into the array
arr.push(randomNumber);

// Show results
console.log(randomNumber);
console.log(arr);
&#13;
.as-console-wrapper {
  max-height: 100% !important;
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你也可以试试这个

&#13;
&#13;
var arr =[1,3,5,6,9,4,7,10];
var num=parseInt((Math.random()*10)+1)
while(arr.indexOf(num)!=-1){
num=parseInt((Math.random()*10)+1);
}
arr.push(num)
console.log(arr)
&#13;
&#13;
&#13;

在上面的示例中,我随机取一个数字并检查循环,该数字是否存在于数组中

while(arr.indexOf(num)!=-1)

如果数字不存在那么再次在内部循环中我再次生成一个数字并检查。当我得到一个不存在的数字时,循环体将不会被执行,我在数组中推送该数字。

正如你所说,你只想要一个数字 8或2

答案 2 :(得分:0)

我明白了。

var arr = [1, 3, 5, 6, 9, 4, 7, 10];
var num = Math.floor((Math.random() * 10) + 1);
for (i = 0; i < arr.length; i++) { 

    while (num == arr[i]) {
     num = Math.floor((Math.random() * 10) + 1);  }
     arr.push(num);}

基本上如果它是重复的,我只需将i = 0再次循环,直到它是唯一的。它可能效率不高。

答案 3 :(得分:0)

函数查找返回一个数组,其中填充了所有重复的数字。经过优化

function find(a, b) {
    let result = [];
    for(let i=0; i<a.length; i++) {
        let num = NumbersList[i];
            if(b[num] == 0) {
                b[num] = 1;
            } else if (b[num] == 1) {
                b[num] = 2;
                result.push(num);
            }
    }  
console.log("Duplicated numbers: " +result.length);
return result;
}

var NumbersList = new Array();
var value = 30000;

    for(let i=0; i<value; i++) {
        let x = Math.floor((Math.random() * value) + 1);
        NumbersList.push(x);
    }

var map = new Array(NumbersList.length).fill(0);

    var t0 = performance.now();
    find(NumbersList, map);
    var t1 = performance.now();
    console.log("Call to find with " +value+ " numbers took " + (t1 - t0) + " milliseconds.");