2015-06-04 2 views
4

Является ли следующий код правильно:(How) Могу ли я использовать 'или' в инструкции switch?

var user = prompt("Is programming awesome?").toUpperCase(); 
switch (user) { 
    case 'HELL YEAH' || 'YES' || 'YEAH' || 'YEP' || 'YEA': 
     console.log("That's what I'd expected!"); 
    break; 
    case 'KINDA'||'CANT SAY': 
     console.log("Oh, you'd like it when you'll be a pro!"); 
    break; 
    case 'HELL NO'||'NO'||'NAH'||'NOPE'||'NA': 
     console.log("You can't say that!"); 
    break; 
    default: 
     console.log("Wacha tryna say mate?"); 
    break; 
} 

Я попробовал. Но это не сработало, как я этого хотел. Он работал хорошо, если вход был «ад нет» или «черт возьми», но все последующие строки были просто проигнорированы!

+0

Быстрый ответ нет, вы не можете. – Andy

+0

отделить эти || с случаями – AkshayJ

ответ

6

Я хотел бы подойти к этому с использованием словаря (объект), содержащий ваши ответы, которые вы можете проверить с помощью функции в switch. Это не очень много аккуратнее, чем наличие нескольких проверок случай:

var user = prompt("Is programming awesome?").toUpperCase(); // 'HELL YEAH'; 

// 'dictionary' is just a JS object that has key/value pairs 
// In this instance we have keys that map the case checks you were 
// making and each has a corresponding array for its value, filled with 
// the OR checks you wanted to make. 
// We pass 'dict' in as the second parameter when we call checkAnswer 
var dict = { 
    yes: ['HELL YEAH', 'YES', 'YEAH', 'YEP', 'YEA'], 
    maybe: ['KINDA', 'CANT SAY'], 
    no: ['HELL NO', 'NO', 'NAH', 'NOPE', 'NA'] 
}; 

// checkAnswer returns 'yes' for the user prompt 'HELL YEAH' 
// It loops over the 'dict' object and if it finds an instance of 
// your user input in one of the arrays it returns the key 
// in this instance 'yes' for 'HELL YEAH' (indexOf returns 0) 
// otherwise it returns false (for your 'default' case) 
function checkAnswer(user, dict) { 
    for (var p in dict) { 
     if (dict[p].indexOf(user) > -1) return p; 
    } 
    return false; 
} 

// All we do is use checkAnswer to return the key where 
// the user input is found in one of the dictionary arrays. 
// That will always be a single string which is what switch expects 
switch (checkAnswer(user, dict)) { 
    case 'yes': 
     console.log("That's what I'd expected!"); 
     break; 
    case 'maybe': 
     console.log("Oh, you'd like it when you'll be a pro!"); 
     break; 
    case 'no': 
     console.log("You can't say that!"); 
     break; 
    default: 
     console.log("Wacha tryna say mate?"); 
     break; 
} 

DEMO

+0

Ну, я в настоящее время изучаю JS. Так что я не мог понять ваш код вообще! Но спасибо за это. Надеюсь, когда-нибудь это поможет мне! :) – Perceptioner

+0

Я буду комментировать код немного лучше, чтобы помочь вам. – Andy

+0

@Perceptioner, я обновил свой ответ кучей указателей, чтобы помочь вам в будущем. – Andy

3

Я думаю, что вы должны сделать:

var user = prompt("Is programming awesome?").toUpperCase(); 
    switch (user) { 
    case 'HELL YEAH': 
    case 'YES': 
    case 'YEAH': 
    case 'YEP': 
    case 'YEA': 
     console.log("That's what I'd expected!"); 
     break; 
    case 'KINDA': 
     ... 
} 

И так далее ...

0

случаев Группа без перерыва.

var user = prompt("Is programming awesome?").toUpperCase(); 
    switch (user) { 
     case 'HELL YEAH': 
     case 'YES': 
     case 'YEAH': 
     case 'YEP': 
     case 'YEA': 
      console.log("That's what I'd expected!"); 
     break; 
     case 'KINDA': 
     case 'CANT SAY': 
      console.log("Oh, you'd like it when you'll be a pro!"); 
     break; 
     case 'HELL NO': 
     case 'NO': 
     case 'NAH': 
     case 'NOPE': 
     case 'NA': 
      console.log("You can't say that!"); 
     break; 
     default: 
      console.log("Wacha tryna say mate?"); 
     break; 
    } 
1

Переключатель Javascript имеет падение-через поведение, вы можете использовать это, чтобы получить то, что вы описали:

var user = prompt("Is programming awesome?").toUpperCase(); 
switch (user) { 
    case 'HELL YEAH': 
    case 'YES': 
    case 'YEAH': 
    case 'YEP' 
    case 'YEA': 
     console.log("That's what I'd expected!"); 
     break; 
    case 'KINDA': 
    case 'CANT SAY': 
     console.log("Oh, you'd like it when you'll be a pro!"); 
     break; 
    case 'HELL NO': 
    case 'NO': 
    case 'NAH': 
    case 'NOPE': 
    case 'NA': 
     console.log("You can't say that!"); 
     break; 
    default: 
     console.log("Wacha tryna say mate?"); 
     break; 
} 

Не фантазии, как с помощью оператора или, но это работает. С провалом выполнение конкретного case будет идти вниз, пропуская несоответствующие в той же группе, пока не будет достигнут какой-либо реальный код.

0

Я считаю, что коммутатор должен соответствовать своим случаям строкам, поэтому || оператор не будет работать.

Однако вы можете иметь несколько случаев, определяющих один и тот же результат, который вы можете сделать, свернув break;.

switch(word) { 
    case "yes": 
    case "yeah": 
    goThroughWithIt(); 
    break; 

    case "no": 
    case "nuh uh": 
    abort(); 
    break; 
} 
1

Нет, но в C++, Java и т.д. Вы можете сделать следующее:

switch (a_variable) { 
    case CONST_1: 
    case CONST_2: 
    case CONST_3: 
     do_something(); 
     break; 
    case CONST_4: 
     do_some_stuff(); 
     break; 
    dafeult: 
     do_default_stuff(); 
     break; 
} 

Это как or для switch-case. Это должно работать в JS тоже ^^

0

Я думаю, вы должны изменить следующим образом:

var user = prompt("Is programming awesome?").toUpperCase(); 
switch (user) { 
    case 'HELL YEAH': 
    case 'YES': 
    case 'YEAH': 
    case 'YEP': 
    case 'YEA': 
     console.log("That's what I'd expected!"); 
    break; 

    case 'KINDA': 
    case 'CANT SAY': 
     console.log("Oh, you'd like it when you'll be a pro!"); 
    break; 

    case 'HELL NO': 
    case'NO': 
    case'NAH': 
    case'NOPE': 
    case'NA': 
     console.log("You can't say that!"); 
    break; 

    default: 
     console.log("Wacha tryna say mate?"); 
    break; 
} 
Смежные вопросы