2016-03-29 12 views
-1

Ich versuche, eine Liste von 10 Zufallszahlen zwischen 0-30 mit Javascript zu bekommen.
So weit so gut, aber ich habe eine andere Liste mit bestimmten Nummern (0,5,10,11,12,13,15,16,17,18,20,22,23).
Nur max. 4 Zahlen dieser Liste sind in dem zufälligen Array erlaubt. Das macht mich verrückt, weil ich keine Ahnung habe, das zu kombinieren.Javascript Zufallszahlen keine Duplikate nicht in bestimmten Liste

Ich bin dankbar für jede Hilfe. Vielen Dank.

Hier ist mein Code:

<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

mit Wiederholungs- oder ohne? –

+2

Überprüfen Sie einfach, ob 'rnd' in' filter' ist, und behalten Sie einen Zähler, wie viele es gibt? –

+0

Entschuldigung, ohne Duplikate. – Tobias

Antwort

1

Ein Vorschlag mit Blick nach oben.

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

Danke Nina, das ist es. Funktioniert gut! – Tobias

Verwandte Themen