Можно ли добавить условия внутри оператора switch? - PullRequest
0 голосов
/ 07 апреля 2020

Я использовал операторы if, else if и else до и сегодня. Я решил использовать операторы switch, которые действительно упростили мой код. Мой вопрос, как и в случае утверждений, есть ли способ добавить несколько условий внутри оператора switch?

Вот пример:

<script>
var textInput = input.value;

switch (textInput) {
case "orange":
    text = "You decided to eat an orange. Do you want to eat another fruit?";

}
document.getElementById("message").innerHTML = text;

</script>

Но, скажем, я хотел добавить ответ на вопрос, который я добавил о том, хочешь ли ты съесть другой фрукт. Как бы я добавил еще одно условие внутри этого случая, чтобы я мог получить ответ обратно, если кто-то наберет ответ «да» или «нет» на вопрос?

Возможно ли что-то подобное? Я надеюсь, что мой вопрос легко понять.

Спасибо за вашу помощь!

Ответы [ 7 ]

1 голос
/ 07 апреля 2020

Вы можете поместить любой обычный код в case, поэтому вы можете добавить if операторов:

switch (textInput) {
case "orange":
    if (some_other_condition) {
        text = "You decided to eat an orange. Do you want to eat another fruit?";
    } else {
        text = "OK, that's the last fruit";
    }
    break;
    ...
}
0 голосов
/ 07 апреля 2020

Вы можете вставить оператор switch в do-while l oop, поэтому вопрос повторяется до тех пор, пока не будет введена какая-то предопределенная строка завершения, которая завершит l oop. Таким образом, вам не нужно несколько условий внутри каждого оператора switch.

Проверьте и запустите ниже:

var text = "Pick a fruit you'd like to eat: apple, orange, banana or none if you don't want any more";
var eaten = [];

do {
  var textInput = prompt(text);
  
  switch (textInput) {
  case "orange":
    eaten.push("orange");
    text = "You decided to eat an orange. If you'd like to eat more type apple, orange, banana or none to end";
    break;
  case "apple":
    eaten.push("apple");
    text = "You decided to eat an apple. If you'd like to eat more type apple, orange, banana or none to end";
    break;
  case "banana":
    eaten.push("banana");
    text = "You decided to eat an banana. If you'd like to eat more type apple, orange, banana or none to end";
    break;
  default:
    text = "The selection made was not valid\n\nPick a fruit you'd like to eat: apple, orange, banana or none if you don't want any more";
    break;
  }
} while(textInput !== "none");

var msgText = "You ate: ";
for(var i=0; i<eaten.length; i++) {
  msgText += eaten[i];
  if(i != eaten.length-1)
    msgText += ", ";
}
document.getElementById("message").innerHTML = msgText;
<div id="message"></div>
0 голосов
/ 07 апреля 2020

Ну, насколько я знаю, вы не можете добавлять условия в оператор switch. Оператор Switch просто работает, чтобы перехватывать различные состояния или «случаи», которые может принимать одна переменная.

Может быть, вы можете попробовать что-то вроде:

var addMore = true
while(addMore){
 var textInput = prompt("Select your fruit");
 switch (textInput) {
  case "orange":

   addMore = confirm("You decided to eat an orange. Do you want to eat another fruit?") // Maybe a yes or no question
  default:
    addMore = false
  }
 }

Но если у вас есть пользовательский интерфейс, вы должны использовать компонент с несколькими входами, такой как Checkbox или что-то в этом роде.

Надеюсь, это было полезно

0 голосов
/ 07 апреля 2020

Да, вы можете поместить Если условия внутри коммутатора, попробуйте здесь .

switch (true) {
    case (dog === 'pet' && cat === 'pet'):
        // execute
        break;
    case (foo === 'bar'):
        // do something else
        break;
    default:
        // text = "You decided to eat an orange. Do you want to eat another fruit?";
}
0 голосов
/ 07 апреля 2020

Пока вы не break дело, оно будет продолжаться через оператор switch.

switch (textInput) {
  case "orange":
    text = "You decided to eat an orange. Do you want to eat another fruit?";
    // break; we won't break here since it's commented out
  case "fruit":
    text = "You decided to eat a fruit?";
    break;
}

назначит You decided to eat a fruit? text, если textInput равно orange или fruit.

Это дает вам ограниченную возможность объединить определенный контекст, , но это очень плохая практика .

0 голосов
/ 07 апреля 2020

вы можете сделать что-то вроде этого, хотя в целом это не способ go:

function test(input1, input2) {
     switch (true) {
        case input1 > input2:
                    console.log(input1 + " is larger than " + input2);
                    break;
        case input1 < input2:
                    console.log(input2 + " is larger than " + input1);
                    break;
        default:
                    console.log(input1 + " is equal to " + input2);
      }
   }
   
   test(5,6);
0 голосов
/ 07 апреля 2020

Абсолютно !! Добавление к вашему коду:

<script>
var textInput = input.value;

switch (textInput) {
case "orange":
    text = "You decided to eat an orange. Do you want to eat another fruit?";
    break;
case "banana":
    text = "Had a banana today";
    break;
case default: // Which cannot be found in the case will drop to here
    text : ""; // DO nothing as per OP request
    break;
}
document.getElementById("message").innerHTML = text;

</script>

Для более подробной информации, пожалуйста, обращайтесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch

...