2016-03-29 45 views
-1

我試圖得到0到30之間的10個隨機數字與Javascript的列表。
到目前爲止這麼好,但我有另一個具體數字列表(0,5,10,11,12,13,15,16,17,18,20,22,23)。
僅限最大。這個列表的4個數字在隨機數組中是允許的。這讓我發瘋,因爲我不知道如何結合這一點。Javascript的隨機數字沒有重複不在具體的列表

我很感激任何幫助。謝謝。

這裏是我的代碼:

<script language="JavaScript" type="text/javascript"> 
<!--  

function random(min, max, i, filter) { 
    var array = {}; 
    var zufall = []; 
    while(i) { 

    var rnd = Math.floor(Math.random() * (max - min + 1)) + min; 
    if(!array[rnd]) { 
     array[rnd] = true; 
     i--; 
     zufall.push(rnd); 
    } 
    } 
    return zufall; 
} 

var filter = new Array(0,5,10,11,12,13,15,16,17,18,20,22,23); 

console.log("Random: " + random(0,30,10,filter)); 

//--> 
</script> 
+0

有重複或不? –

+2

只需檢查'rnd'是否在'filter'中,並保留一個有多少個計數器的計數器? –

+0

對不起,沒有重複。 – Tobias

回答

1

與查找一個建議。

function random(min, max, i, filter) { 
 
    var result = [], 
 
     filterCount = 0, 
 
     rnd; 
 

 
    while (i) { 
 
     rnd = Math.floor(Math.random() * (max - min + 1)) + min; 
 
     if (~result.indexOf(rnd)) { 
 
      continue; 
 
     } 
 
     if (~filter.indexOf(rnd)) { 
 
      if (filterCount >= 4) { 
 
       continue; 
 
      } 
 
      filterCount++; 
 
     } 
 
     result.push(rnd); 
 
     i--; 
 
    } 
 
    return result; 
 
} 
 

 
var filter = [0, 5, 10, 11, 12, 13, 15, 16, 17, 18, 20, 22, 23], 
 
    zufall = random(0, 30, 10, filter);  
 

 
document.write('<pre>' + JSON.stringify(zufall, 0, 4) + '</pre>');

+1

謝謝妮娜,就是這樣。工作正常! – Tobias