首页 文章

在JavaScript中切换语句多个案例

提问于
浏览
555

我在JavaScript中的switch语句中需要多个案例,例如:

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

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

我怎样才能做到这一点?如果在JavaScript中没有办法做类似的事情,我想知道一个跟随DRY concept的替代解决方案 .

16 回答

  • 44
    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

    你可以使用' in '操作符......
    依赖于对象/哈希调用......
    所以它和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]()
    

    享受,ZEE

  • -2

    如果您使用的是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浏览器中不起作用,但您可以相当容易地修补 . 有关详细信息,请参阅问题determine if string is in list in javascript .

  • -5

    It depends. Switch评估一次且仅评估一次 . 在匹配时,所有后续案例陈述直到'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>
    
  • 1114

    这适用于常规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);
    

    干杯 .

  • 2

    在节点中,您似乎可以执行此操作:

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

    在某些情况下,这使得代码更加紧凑 .

  • 5

    你可以像这样写:

    switch (varName)
    {
       case "afshin": 
       case "saeed": 
       case "larry": 
           alert('Hey');
           break;
    
       default: 
           alert('Default case');
           break;
    }
    
  • 5
    <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>
    <div id="result"><b></b></div> </center> </center> </body>
  • 3

    使用 switch 语句的fall-through功能 . 匹配的大小写将一直运行,直到找到 break (或 switch 语句的结尾),因此您可以将其写为:

    switch (varName)
    {
       case "afshin":
       case "saeed":
       case "larry": 
           alert('Hey');
           break;
    
       default: 
           alert('Default case');
    }
    
  • 15

    这是完全避免 switch 语句的不同方法:

    var cases = {
      afshin: function() { alert('hey'); },
      _default: function() { alert('default'); }
    };
    cases.larry = cases.saeed = cases.afshin;
    
    cases[ varName ] ? cases[ varName ]() : cases._default();
    
  • -3

    在Js中为switch分配多个case我们必须定义 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>
    

    请参阅示例单击link

  • 63

    我这样用:

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

    添加和澄清Stefano的答案,您可以使用表达式以动态方式设置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');
    }
    

    虽然不是那么干......

  • 1

    我可以看到他们在这里有很多好的答案,但是当我们需要检查超过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'));
    
  • 3

    在switch语句中执行多个case的另一种方法,当在函数内部时

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

    只需切换开关状态即可

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

相关问题