2016-05-31 2 views
0

したがって、複数の文字列を含む配列があります。2番目のサイクルで特定の文字列を無視する

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"]; 

私の機能はランダムに1つを選択します。私はこれを設定する必要があります:もしそれが赤1を拾うならば、それは赤で全ての文字列を無視し、オレンジか青のうちの1つだけを印刷します。

現在のコードは次のようになります。

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]; 
} 

しかし、私が何をやったかに関係なく、それはどちらか何かをプリントアウト、または静止ランダムではありません。

mod1およびmod2は、htmlの要素の名前です。

答えて

0

あなたのためのメモのカップル;

2つの値だけをチェックしています。 Array [num] Array [num2]の両方に「赤」が含まれていると、不運になります。

あなたは2つの異なる場所に保存しています。あなたが「何も印刷しない」というあなたの説明に基づいて、私はあなたがdocument.mod2.srcを印刷していると推測します.Array [num]が赤の場合にのみ読み込まれます。

これらの問題を解決するには、whileループを使用し、最終結果を1つの場所に保存する必要があります。

幸運を祈る!

0

あなたが記述していることはあなたのコードはまったく同じものです: *「赤ではありません」=>プリント(ランダムである)場合 *「赤です」=>は何も

を印刷いけない場合、私はあなたが希望を推測「赤です」場合* =>は(ランダムなので、別の1

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); 

を選ぶ)ランダムに選択し、あなたが上に赤いものを選ぶに終わるかもしれない:のような「赤である」の場合には、フォールバックを選択することを好みますオーバー。実際のユースケースに応じて、有効な要素が残っていない場合もあります。だから、上記の解決策の代わりに、私はむしろ次のような提案をします。

PS:変数「配列」を削除してください!

+0

私はそれが正しいと思っていますが、どのように私の現在の機能にスニペットを実装する必要があります0アイデアがあります。しかし、私は、各色の配列をランダムに選択し、その配列から1つの文字列を選択するアイデアを思いつきました。 – H4rdas

+0

あなたの実際のユースケースを知っていないので、私は本当に助けません。 2つ目の配列を変更できない場合は、( "a = a.filter ..."を "b = a.filter ..."に置き換えてからb)で作業してください。 – ZPiDER

関連する問題