2016-05-31 18 views
0

Also, ich habe ein Array, das mehrere Strings enthält.Ignorieren bestimmter Strings im zweiten Zyklus

var Array = ["mods/red1.png", "mods/red2.png", "mods/red3.png", "mods/orange1.png", "mods/orange2.png", "mods/orange3.png", "mods/blue1.png", "mods/blue2.png", "mods/blue3.png"]; 

Meine Funktion wählt eine zufällig aus. Ich muss das einrichten: Wenn es Rot1 aufnahm, würde es alle Zeichenfolgen mit Rot ignorieren und nur eines der Orange oder Blau ausdrucken.

Aktuelle Code sieht etwa so aus:

var num = Math.floor(Math.random() * Array.length); 
var num2 = Math.floor(Math.random() * Array.length); 
    if(RedModArray[num] !== undefined){ 
       document.mod1.src = Array[num]; 
if(Array[num].indexOf("red") > -1){ 
document.mod2.src = Array[num2]; 
} 

Aber egal, was ich getan habe, sei es nichts ausdrucken, oder ist noch zufällig.

mod1 und mod2 sind die Namen der Elemente in HTML.

Antwort

0

Ein paar Notizen für Sie;

Sie überprüfen nur zwei Werte. Wenn Array [num] und Array [num2] beide "rot" enthalten, haben Sie kein Glück.

Sie speichern an zwei verschiedenen Standorten. Aufgrund Ihrer Erklärung, dass es manchmal "nichts ausgibt", gehe ich davon aus, dass Sie document.mod2.src drucken, das nur ausgefüllt wird, wenn Array [num] rot ist.

Um diese Probleme zu lösen, müssen Sie eine while Schleife verwenden und Ihr Endergebnis an einem einzigen Ort speichern.

Viel Glück!

0

Was Sie beschreiben, ist genau das, was Ihr Code tut: * wenn „nicht rot“ => print (zufällig ist) * wenn „rot“ => drucken alles nicht

Ich denke, man würde lieber einen Rückfall bei wählen „ist rot“ wie: * if => „rot“ ein anderes

var a = ["mods/red1.png", "mods/red2.png", "mods/red3.png", "mods/orange1.png", "mods/orange2.png", "mods/orange3.png", "mods/blue1.png", "mods/blue2.png", "mods/blue3.png"]; 
var o1 = a[Math.floor(Math.random() * a.length)]; 
var o2; 
do { o2 = a[Math.floor(Math.random() * a.length)]; } 
while (o2.indexOf("red") >= 0); 

Da zufällig auswählen() wählt zufällig, könnte man einen roten über am Ende Kommissionierung und über. Abhängig von Ihrem tatsächlichen Anwendungsfall sind möglicherweise noch keine gültigen Elemente mehr verfügbar. Anstelle der obigen Lösung schlage ich eher etwas wie folgt vor: Filtere die Elemente, die du nach der ersten Auswahl nicht haben möchtest.

var o1 = a[Math.floor(Math.random() * a.length)]; 
a = a.filter(function(o) { return o.indexOf('red') < 0; }) 
var o2 = a[Math.floor(Math.random() * a.length)]; 

PS: Nenne keine Variable "Array"!

+0

Sie haben es richtig, was ich meinte, aber ich habe 0 Idee, wie ich das Snippet in meine aktuelle Funktion implementieren sollte. Aber ich kam auf eine Idee, wo ich für jede Farbe ein Array machen, zufällig ein Array auswählen und dann eine Zeichenfolge aus diesem Array auswählen sollte, wenn es sinnvoll ist. – H4rdas

+0

Ich kenne Ihren tatsächlichen Anwendungsfall nicht, also kann ich wirklich nicht helfen. Sie können immer ein zweites Array verwenden, wenn Sie das nicht ändern können (ersetzen Sie "a = a.filter ..." durch "b = a.filter ..." und arbeiten Sie dann mit b). – ZPiDER