在数组中生成随机NOT

时间:2013-05-14 16:10:13

标签: javascript jquery arrays random

我正在尝试生成一个在限制数组中不存在的随机数。

JS

var restricted = [3, 4, 7];

function getRand () {

    rand = Math.floor(Math.random() * 10);

    if ($.inArray(rand, restricted) === -1) {
        return rand;
    } else {
        try again
    }


}

rand = getRand ();

3 个答案:

答案 0 :(得分:2)

您需要一个while循环来测试rand数组中是否有restricted,如果是,则重新生成一个新的随机数:

var rand;
do { 
    rand = Math.floor(Math.random() * 10); // re-randomize
} while ($.inArray(rand, restricted) > -1);
return rand;

http://jsfiddle.net/mblase75/dAN8R/

答案 1 :(得分:2)

如果您的问题是关于如何实施“再试一次”部分,请以递归方式调用getRand

var restricted = [3, 4, 7];

function getRand() {
    var rand = Math.floor(Math.random() * 10);
    if ($.inArray(rand, restricted) === -1) {
        return rand;
    } else {
        return getRand();
    }
}

var rand = getRand();

此外,如果您使用的是jQuery for $.inArray方法,我建议使用Array.prototype.indexOf代替(对于不兼容的浏览器,可以使用垫片here)。

答案 2 :(得分:1)

试试这个 -

var restricted = [3, 4, 7];

function getRand () {
    var gotRand = false;
    var rand;
    while(!gotRand){  // loop until you got random number
       rand = Math.floor(Math.random() * 10);
       if ($.inArray(rand, restricted) === -1) {
          gotRand = true;
       }
    }
    return rand;
}

rand = getRand();