2013-05-14 106 views
-3

我想生成一个不存在于受限数字数组中的随机数字。在数组中生成随机数字

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(); 
+0

如果它被限制,它不是很随机。你现在的代码又有什么问题? – Neal 2013-05-14 16:11:42

+3

而且,你的问题是什么? – 2013-05-14 16:11:46

+2

我猜他想让我们写'重试'部分? – Antony 2013-05-14 16:12:10

回答

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/

+0

OP的当前代码有什么问题? – Neal 2013-05-14 16:12:44

+2

@Neal对于初学者,“再试一次”不是有效的代码。 – Blazemonger 2013-05-14 16:13:13

+0

它应该是'== -1' – 2013-05-14 16:13:16

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(); 
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全部是$.inArray方法,我建议使用Array.prototype.indexOf相反(对于不兼容的浏览器,垫片可用here)。