2010-11-19 3 views
0

Скажем, у меня есть этот циклКаков самый чистый способ ветвления, на основе которого условный разрыв цикла while в Javascript?

while(condition1 && condition2 && condition3 && condition4){ 
    browseReddit(); 
} 

if (!condition1){} 
if (!condition2){} 
if (!condition3){} 
if (!condition4){} 

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

Ввод цепи if после цикла - это то, как я делаю это сейчас. Есть ли более чистый способ? краткость стоимости, прежде всего, в вашем ответе.

+2

Почему вы думаете, что это не самый эффективный способ? Чего вы пытаетесь достичь? Вам просто нужен более короткий метод или метод oneliner? Вы можете использовать trernary style op. – jcolebrand

+2

Что делать, если цикл выходит из строя, и оба условия 1 и условие2 являются ложными? Вы хотите иметь дело с обоими? На данный момент ваш код будет обрабатывать только условие1. Возможно, вам не нужны те, вложенные, и просто используйте вместо них 4 if-end. – david

+0

@ david Я хочу иметь дело с каждым случаем, так что должно было быть 4 конца if. Ред. – Nathan

ответ

2
while (1) { 
    stop = 0; 
    if (!condition1) { 
     // condition 1 code 
     stop = 1; 
    } 
    if (!condition2) { 
     // condition 2 code 
     stop = 1; 
    } 
    if (!condition3) { 
     // condition 3 code 
     stop = 1; 
    } 
    if (!condition4) { 
     // condition 4 code 
     stop = 1; 
    } 
    if (stop) { 
     break; 
    } 
    browseReddit(); 
} 
+0

Думаю, я мог бы это понять. _feels dumb_ – Nathan

+0

Возможно, он не хочет, чтобы этот код был вложен в его список. – jcolebrand

+0

@ Джон: Я отредактировал ответ после того, как он редактировал вопрос. –

0

Я бы поступил так, как у вас есть в вашем текущем образце кода, чтобы вы не освобождали себя от тестирования всех четырех ваших случаев выхода.

1

Заключительный изменить:

while((condition1||function(){alert("condition1 failed!");}()) & 
     (condition2||function(){alert("condition2 failed!");}()) & 
     (condition3||function(){alert("condition3 failed!");}()) & 
     (condition4||function(){alert("condition4 failed!");}())){ 
    browseReddit(); 
} 

jsfiddle: http://jsfiddle.net/ctrlfrk/HjftT/3/

+0

Я не думал, что все javascript-двигатели сделали короткозамкнутые выражения – jcolebrand

+0

Его следует записать в спецификацию. Исправлено так, что он действительно работает сейчас. Http://jsfiddle.net/ctrlfrk/HjftT/ – david

+0

Хорошо, я думаю, что я проделал: p Я думаю, что это оценивает условия минимальное количество раз, а также имеет дело с несколькими сбоями. Вам просто нужно быть осторожным, чтобы убедиться, что ваши анонимные функции не верны. – david

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

  • Нет связанных вопросов^_^