Оператор Switch несколько случаев в JavaScript

Мне нужно несколько случаев в инструкции switch в JavaScript, что-то вроде:

switch (varName)
{
   case "afshin", "saeed", "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
       break;
}

Как я могу это сделать? Если нет способа сделать что-то подобное в JavaScript, я хочу знать альтернативное решение, которое также следует сухой концепция.

16 ответов


используйте функцию fall-through switch заявление. Совпадающий случай будет работать до break (или конец switch оператор) найден, поэтому вы можете написать его так:

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
}

это работает в обычном JavaScript

function theTest(val) {
  var answer = "";
  switch( val ) {
    case 1: case 2: case 3:
      answer = "Low";
      break;
    case 4: case 5: case 6:
      answer = "Mid";
      break;
    case 7: case 8: case 9:
      answer = "High";
      break;
    default:
      answer = "Massive or Tiny?";
  } 
  return answer;  
  }

  theTest(9);

Ура.


вот другой подход, избегая switch заявление полностью:

var cases = {
  afshin: function() { alert('hey'); },
  _default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;

cases[ varName ] ? cases[ varName ]() : cases._default();

в Js для назначения нескольких случаев в коммутаторе мы должны определить different case without break как показано ниже:

   <script type="text/javascript">
      function checkHere(varName){
        switch (varName)
           {
           case "saeed":
           case "larry":
           case "afshin":
                alert('Hey');
                break;
          case "ss":
             alert('ss');
             break;
         default:
             alert('Default case');
             break;
       }
      }
     </script>

см. пример нажмите на ссылке


Если вы используете ES6, вы можете сделать это:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}

или для более ранних версий JavaScript, вы можете сделать это:

if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}

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


вы можете использовать 'на'...
полагается на вызов объекта / хэша...
так что его так быстро, как javascript может быть...

// assuming you have defined functions f(), g(a) and h(a,b) 
// somewhere in your code
// you can define them inside the object but... 
// the code becomes hard to read, I prefer this way

o = { f1:f, f2:g, f3:h };

// if you use "STATIC" code can do:
o['f3']( p1, p2 )

// if your code is someway "DYNAMIC", to prevent false invocations
// m brings the function/method to be invoked (f1, f2, f3)
// and you can rely on arguments[] to solve any parameter problems
if ( m in o ) o[m]()

наслаждайтесь, Зи


добавляя и уточняя ответ Стефано, вы можете использовать выражения для динамического задания значений условий в switch, например:

var i = 3
switch (i) {
    case ((i>=0 && i<=5)?i:-1): console.log('0-5'); break;
    case 6: console.log('6');
}

таким образом, в вашей проблеме вы можете сделать что-то вроде:

var varName = "afshin"
switch (varName) {
    case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
      console.log("hey");
      break;

    default:
      console.log('Default case');
}

хотя и не так сильно сушит..


в узле кажется, что вам разрешено это делать:

data = "10";
switch(data){
case "1": case "2": case "3": //put multiple cases on the same line to save vertical space.
   console.log("small"); break;
case "10": case "11": case "12":
   console.log("large"); break;
default:
   console.log("strange");
   break;
}

в некоторых случаях это делает код более компактным.


Это зависит. переключатель вычисляется только один раз. После матча все последующие заявления по делу до "разрыва" огня независимо от того, что говорит дело.

var onlyMen = true;
var onlyWomen = false;
var onlyAdults = false;
 
 (function(){
   switch (true){
     case onlyMen:
       console.log ('onlymen');
     case onlyWomen:
       console.log ('onlyWomen');
     case onlyAdults:
       console.log ('onlyAdults');
       break;
     default:
       console.log('default');
   }
})(); // returns onlymen onlywomen onlyadults
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

switch (myVariable)
{
  case "A":
  case "B":
  case "C": 
    // Do something
    break;
  case "D":
  case "E":
    // Do something else
    break;
  default: 
    // Default case
    break;
}

в этом примере, если значением myVariable является A, B или C, он будет выполнять код в случае "C":.


Я вижу, что здесь много хороших ответов, но что, если произойдет, когда нам нужно проверить более 10 cases? вот мой подход.

 function isAccessible(varName){
     let accessDenied = ['Liam','Noah','William','James','Logan','Benjamin',
                        'Mason','Elijah','Oliver','Jacob','Daniel','Lucas'];
      switch (varName) {
         case (accessDenied.includes(varName)?varName:null): 
             return 'Access Denied!';
         default:
           return 'Access Allowed.';
       }
    }

    console.log(isAccessible('Liam'));  

другой способ выполнения нескольких случаев в операторе switch, когда внутри функции

 function name(varName){
      switch (varName) {
         case 'afshin':
         case 'saeed':
         case 'larry':
           return 'Hey';
         default:
           return 'Default case';
       }
    }
            
    console.log(name('afshin')); //Hey

Я использую такой:

switch (sensor){
     case /Pressure/g.test(sensor):{
        console.log('Its pressure!');
        break;
     }
     case /Temperature/g.test(sensor):{
        console.log('Its temperature!');
        break;
     }
}

вы можете написать это так:

switch (varName)
{
   case "afshin": 
   case "saeed": 
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
       break;
}         

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Example1</title>
    <link rel="stylesheet" href="css/style.css" >
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <script>
        function display_case(){
            var num =   document.getElementById('number').value;

                switch(num){

                    case (num = "1"):
                    document.getElementById("result").innerHTML = "You select day Sunday";
                    break;

                    case (num = "2"):
                    document.getElementById("result").innerHTML = "You select day  Monday";
                    break;

                    case (num = "3"):
                    document.getElementById("result").innerHTML = "You select day  Tuesday";
                    break;

                    case (num = "4"):
                    document.getElementById("result").innerHTML = "You select day  Wednesday";
                    break;

                    case (num = "5"):
                    document.getElementById("result").innerHTML = "You select day  Thusday";
                    break;

                    case (num = "6"):
                    document.getElementById("result").innerHTML = "You select day  Friday";
                    break;

                    case (num = "7"):
                    document.getElementById("result").innerHTML = "You select day  Saturday";
                    break;

                    default:
                    document.getElementById("result").innerHTML = "You select day  Invalid Weekday";
                    break
                }

        }
    </script>
</head>
<body>
    <center>
        <div id="error"></div>
        <center>
            <h2> Switch Case Example </h2>
            <p>Enter a Number Between 1 to 7</p>
            <input type="text" id="number" />
            <button onclick="display_case();">Check</button><br />
            <div id="result"><b></b></div>
        </center>
    </center>
</body>

просто переключите условие переключателя aprroach

switch (true) {
    case (function(){ return true; })():
        alert('true');
        break;
    case (function(){ return false; })():
        alert('false');
        break;
    default:
        alert('default');
}