2013-05-14 235 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)。