2016-05-31 73 views
0

所以,我有一個數組,其中包含多個字符串。第二個循環忽略某些字符串

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

我的函數隨機選取一個。我需要設置它:如果它拾取了red1,它將忽略所有帶有紅色的字符串,並且只打印出橙色或藍色中的一個。

當前的代碼看起來是這樣的:

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

但無論我做什麼,它要麼不打印出任何東西,或仍是隨機的。

mod1mod2是html中元素的名稱。

回答

0

幾個筆記給你;

你只檢查兩個值。如果數組[num] 數組[num2]都包含「紅色」,那麼你的運氣不好。

您正在保存到兩個不同的位置。根據你的解釋,它有時「不打印出任何東西」,我猜測你正在打印document.mod2.src,只有在Array [num]是紅色時纔會填充它。

要解決這些問題,您將需要使用while循環,並將最終結果存儲到一個位置。

祝你好運!

0

你所描述的是你的代碼做什麼: *如果「不紅」 =>打印(是隨機的) *如果「紅」 =>不顯示任何信息

我猜你會寧願選擇的情況下,回退「是紅色的」,如: *如果「紅」 =>選擇不同的一個

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的想法,我應該如何實施片段到我目前的功能。但是我想出了一個想法,我應該爲每種顏色創建一個數組,然後隨機選擇一個數組,然後從該數組中選擇一個字符串,如果它有意義的話。 – H4rdas

+0

我不知道你的實際用例,所以我不能真正幫助。如果你不能修改一個數組(如果用「b = a.filter ...」代替「a = a.filter ...」,然後使用b),你總是可以使用第二個數組。 – ZPiDER