非重复随机数选择器

时间:2017-05-25 09:09:44

标签: javascript arrays loops random

我正在尝试创建一个非重复的随机数字选择器,有人可以指出它出了什么问题吗?感谢

var resultArray = [];

function pickRandom(){
  var min = parseInt(document.getElementById("min").value);
  var max = parseInt(document.getElementById("max").value);
    var result = Math.floor((Math.random() * max) + min);

    resultArray.push(result);

  for (var i = 0; i < resultArray.length; i++){
     if(resultArray[i].includes(result))
     {
      pickRandom();
     } else {
      document.getElementById("result").value = result;
     }
  }
}

2 个答案:

答案 0 :(得分:3)

将其更改为:

var resultArray = [];
function pickRandom(){
  var min = parseInt(document.getElementById("min").value);
  var max = parseInt(document.getElementById("max").value);
    var result = Math.floor((Math.random() * max) + min);
    if(resultArray.includes(result))
    {
     pickRandom();
    } else {
     resultArray.push(result);
     document.getElementById("result").value = result;
    }
}

您的代码存在两个问题:
1.首先将新元素推送到数组,然后检查它是否在数组中,因此它始终返回true。这会导致无限循环 2. includes方法被定义为检查数组中是否存在元素或字符串中是否存在字符。在您的代码中,您已遍历数组中的每个元素,然后使用包含方法。

答案 1 :(得分:1)

如果$(function(){ // You can also write $(document).ready(function({ // code}) like this var headerHeight = $('.header').height() + 'px'; $('.container').css('margin-top', headerHeight); }) 的长度等于可能数字的数量并退出循环,则可以使用检查。

resultArray
function pickRandom() {
    var min = +parseInt(document.getElementById("min").value),
        max = +parseInt(document.getElementById("max").value),
        result = Math.floor((Math.random() * (max - min + 1)) + min);

    if (resultArray.length === max - min + 1) {
        document.getElementById("result").value = 'no more available';
        return;
    }
    if (resultArray.includes(result)) {
        pickRandom();
    } else {
        resultArray.push(result);
        document.getElementById("result").value = result;
    }
}

var resultArray = [];