2016-05-31 3 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]; 
} 

Но независимо от того, что я сделал, это либо не печатает что-нибудь, или по-прежнему случайным образом.

mod1 и mod2 - это имена элементов в html.

ответ

0

Пара заметок для вас;

Вы проверяете только два значения. Если Array [num] и Array [num2] оба содержат «красный», то вам не повезло.

Вы экономите до двух разных мест. Основываясь на вашем объяснении, что он иногда «ничего не распечатывает», я собираюсь предположить, что вы печатаете документ.mod2.src, который будет заполнен только в том случае, если Array [num] является красным.

Чтобы решить эти проблемы, вам понадобится использовать цикл while и сохранить конечный результат в одном месте.

Удачи вам!

0

То, что вы описываете, это именно то, что делает ваш код: * если «не красный» => Печать (случайна) * если «красный» => DonT печатать что-нибудь

Я думаю, вы бы предпочитают выбирать запасной вариант в случае «красный», как: * если «красный» => выбрать другой один

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

Так как случайная() выбирает случайным образом, вы могли бы в конечном итоге выбор один красный над и более. В зависимости от вашего реального варианта использования, возможно, даже не будет никаких допустимых элементов, которые можно выбрать. Поэтому вместо решения выше я скорее предлагаю что-то вроде этого: отфильтруйте элементы, которые вы не хотите после первого выбора.

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: Не указывайте переменную «Массив»!

+0

Вы поняли, что я имел в виду, но у меня есть идея, как я должен реализовать фрагмент в моей текущей функции. Но я придумал идею, где я должен сделать массив для каждого цвета, произвольно выбрать массив, а затем выбрать одну строку из этого массива, если это имеет смысл. – H4rdas

+0

Я не знаю вашего фактического прецедента, поэтому я не могу помочь. вы всегда можете использовать второй массив, если вы не можете его изменить (замените «a = a.filter ...» на «b = a.filter ...», а затем выполните работу с b). – ZPiDER

Смежные вопросы