jQuery:如何在给定限制/范围的情况下生成3个不同的随机整数?

时间:2015-11-13 20:05:39

标签: javascript jquery

我试图生成3个不同的随机整数,但我不能用jQuery做到这一点,在某种程度上与JS相比有点不同。

例如,我在我的应用中有20个不同的问题,但我只想看到5个不同的问题,所有问题都是随机的。

我寻找它,我认为我应该为此目的使用此功能:

$.randomBetween(minValue, maxValue);

但它只给你一个号码。如何得到3,在1到20之间,彼此不同?

7 个答案:

答案 0 :(得分:1)

这会给你[howMany] [min]和[max]之间的不同随机整数:

        var howMany = 5;
        var min = 1;
        var max = 20;
        var a = new Array();
        while (a.length < howMany) {
            var n = Math.floor(Math.random() * (max - min) + 0.5) + min;
            if (a.indexOf(n) == -1) {
                a.push(n);
            }
        }
        a.sort(function(a, b){return a-b}); // optional sorting
        console.log(a);

答案 1 :(得分:0)

使用一个数组存储每个随机生成的值。然后检查下一个生成的值是否在数组中,如果是,则再次生成,如果它不在数组中,则将其存储为简单

答案 2 :(得分:0)

这将有效:

var myArray = [];

for(var i = 0; i < 3; i++) {
    var numberIsInArray = false;
    var rand = generateRandomNumb(1, 21);
    for(var j = 0; j < myArray.length; j++){
        if(rand === myArray[j]) {
            numberIsInArray = true;
            i--;
        }
    }
    if(!numberIsInArray){
       myArray.push(rand);
    }
}

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function generateRandomNumb(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
}

你在1 - 20 i myArray之间保存3个不同的随机数。现在你可以用数组中的数字做你想做的事了。

答案 3 :(得分:0)

尝试

function randomRange(from, to, leng){
    var tem, A= [], L= 0, i= 0;
    randomRangeLoop: 
    while(L< leng){
        tem= Math.floor(Math.random()*to)+from;
        i= 0;
        while(i<L){
            if(A[i++]=== tem) continue randomRangeLoop;
        }
        A[L++]= tem;
    }
    return A;
}

alert(randomRange(1, 10, 5))

答案 4 :(得分:0)

调整20个问题数组的代码很简单,我将它放在这里以方便C&amp; P

var questions = [
  'Question 1',
  'Question 2',
  'Question 3',
  'Question 4',
  'Question 5',
  'Question 6',
  'Question 7',
  'Question 8',
  'Question 9',
  'Question 10',
  'Question 11',
  'Question 12',
  'Question 13',
  'Question 14',
  'Question 15',
  'Question 16',
  'Question 17',
  'Question 18',
  'Question 19',
  'Question 20'
];

function knuthShuffle(arr){
  var idx, rand, tmp;
  // start at the end
  idx = arr.length - 1;
  while (idx) {
    /*
       Take one place after another
       reducing the number of places
       every time such that every place
       gets swapped at least once with a
       randomly chosen other place
    */
    rand = Math.floor(Math.random() * idx--);
    // swap current place with random place
    temp = arr[idx];
    arr[idx] = arr[rand];
    arr[rand] = temp;
  }
  return arr;
}
// take the first five elements of the array
var randomFiveQuestions = knuthShuffle(questions).slice(0,5);
// or take the last five ones
randomFiveQuestions = knuthShuffle(questions).slice(-5);

我在这里使用了Knuth shuffle的常规实现,这是wiki页面上的第一个算法。

啊,一如既往地迟到的方式; - )

答案 5 :(得分:0)

此解决方案演示了如何生成3个随机但唯一的数字。有很多方法可以实现这一目标。在我的解决方案中,我选择将收集的数字存储在地图中。在地图O(1)中定位元素比确定元素是否存在于列表O(n)中更有效。

    var numbers = {};

    while (Object.keys(numbers).length < 3) {                // Does the numbers map contains 3 keys if not find a random unique number
        var num = Math.floor(Math.random() * 20) + 1;        // generates random number between 1 and 20 inclusive

        if (numbers[num] != "undefined") {                   // check if the number generated is already a key in the numbers map 
            numbers[num] = num;                              // add the generated number to the map
        }
    }

    console.log(Object.keys(numbers));

答案 6 :(得分:0)

我终于成功地与你的帮助伙伴一起使用了一些&#34; if&#34; &#34; for&#34;必要时循环。谢谢大家的回答和帮助。喜欢这个页面和社区。

function getRandomArbitrary(min, max) {

    var limit=10;

    var values=[];

    for (var i=0; i<limit; i++) {

        var value=Math.floor(Math.random()*(max-min)+min);

        alert("Value number "+i+": "+value);

        if (i==0){
            values[i]=value;
            alert("Initial value: "+values[i]);
        }
        else{
            for (k=0;k<i;k++){
                if(value==values[k]){
                    alert("Repeated: ");
                    k=i;
                    i--;
                }
            }
            if (k==i){
                values[i]=value;
                alert("Value number "+i+" saved: "+values[i]);
            }
        }
    }

//Checking array

    for (var l=0; l<limit; l++){
        alert("Values["+l+"]: "+values[l]);
    }


}