Switch语句在JavaScript中的多种情况

Switch语句在JavaScript中的多种情况,javascript,switch-statement,Javascript,Switch Statement,我需要JavaScript中switch语句中的多个case,例如: switch (varName) { case "afshin", "saeed", "larry": alert('Hey'); break; default: alert('Default case'); break; } var varName = "afshin" sw

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

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

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

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

我该怎么做?如果在JavaScript中没有这样做的方法,我想知道一个替代解决方案,它也遵循。

使用
开关的fall-through特性。匹配的案例将一直运行,直到找到
break
(或
switch
语句的结尾),因此您可以像这样编写:

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

   default: 
       alert('Default case');
}

在Javascript中,要在一个开关中分配多个case,我们必须定义不同的case,而不在两者之间中断,如下所示:

   <script>
      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>

函数checkHere(varName){
开关(varName)
{
案例“saeed”:
“拉里”案:
“afshin”案:
警惕(‘嘿’);
打破
案例“ss”:
警报(“ss”);
打破
违约:
警报(“默认情况”);
打破
}
}

请参见示例单击以下是避免使用
开关的不同方法
语句:

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

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

如果您使用的是ES6,则可以执行以下操作:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}
if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}
alert([
  "afshin", 
  "saeed", 
  "larry",
  "sasha",
  "boby",
  "jhon",
  "anna",
  // ...
].includes(varName)? 'Hey' : 'Default case')
或者对于早期版本的JavaScript,您可以执行以下操作:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}
if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}
alert([
  "afshin", 
  "saeed", 
  "larry",
  "sasha",
  "boby",
  "jhon",
  "anna",
  // ...
].includes(varName)? 'Hey' : 'Default case')

请注意,这在较旧的IE浏览器中不起作用,但您可以相当轻松地修补这些问题。有关更多信息,请参见问题。

您可以使用中的“”运算符
它依赖于对象/散列调用,因此速度尽可能快

// 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 it 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]()

在Node.js中,似乎允许您执行以下操作:

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;
}
在某些情况下,这使得代码更加紧凑。


<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>
例1 函数显示\u case(){ var num=document.getElementById('number')。值; 开关(num){ 案例(num=“1”): document.getElementById(“结果”).innerHTML=“您选择了周日”; 打破 案例(num=“2”): document.getElementById(“结果”).innerHTML=“选择星期一”; 打破 案例(num=“3”): document.getElementById(“结果”).innerHTML=“选择星期二”; 打破 案例(num=“4”): document.getElementById(“结果”).innerHTML=“选择星期三”; 打破 案例(num=“5”): document.getElementById(“结果”).innerHTML=“选择星期四”; 打破 案例(num=“6”): document.getElementById(“结果”).innerHTML=“选择星期五”; 打破 案例(num=“7”): document.getElementById(“结果”).innerHTML=“您选择星期六”; 打破 违约: document.getElementById(“结果”).innerHTML=“您选择的日期无效工作日”; 打破 } } 开关箱示例 输入一个介于1到7之间的数字

检查
只需更改开关条件方法:

switch (true) {
    case (function(){ return true; })():
        alert('true');
        break;
    case (function(){ return false; })():
        alert('false');
        break;
    default:
        alert('default');
}
 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'));

这适用于常规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 (varName)
{
   case "afshin": 
   case "saeed": 
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
       break;
}         
switch (true){
     case /Pressure/.test(sensor): 
     {
        console.log('Its pressure!');
        break;
     }

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

视情况而定。计算一次且仅计算一次。在一场比赛中,所有随后的案件陈述,直到“中断”火灾,无论案件说什么

var onlyMen=true;
var only女性=假;
var onlyAdults=假;
(功能(){
开关(真){
仅限案例人员:
console.log(“onlymen”);
仅限案例女性:
console.log(“仅限女性”);
仅限案例成人:
console.log('onlyAdults');
打破
违约:
console.log('default');
}
})(); // 仅返回仅限男性仅限女性成人
添加和澄清后,您可以使用表达式动态设置开关中条件的值,例如:

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

    case 6: console.log('6');
}

虽然它是如此之多…

在一个switch语句中执行多个case的另一种方法,但在函数中:

函数名(varName){
开关(varName){
“afshin”一案:
“赛义德”一案:
“拉里”案:
返回“嘿”;
违约:
返回“默认情况”;
}
}
console.log(名称('afshin'));//嘿
我这样使用它:

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

   default: 
       alert('Default case');
       break;
}         
switch (true){
     case /Pressure/.test(sensor): 
     {
        console.log('Its pressure!');
        break;
     }

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

我可以看到这里有很多很好的答案,但是如果我们需要检查超过10个案例,会发生什么呢?以下是我自己的方法:

switch (true) {
    case (function(){ return true; })():
        alert('true');
        break;
    case (function(){ return false; })():
        alert('false');
        break;
    default:
        alert('default');
}
 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'));

上述方法的问题在于,每次调用带有
开关的函数时,都必须重复几个
案例。更可靠的解决方案是使用地图字典

以下是一个例子:

//地图,按概念划分
变量字典={
时间段:{
“月”:[1,“月”、“月”、“月”、“月”],
‘两个月’:[2,‘两个月’、‘两个月’、‘双亲’、‘双亲’],
‘三个月’:[3,‘三个月’、‘季度’、‘三个月’],
‘学期’:[4,‘学期’、‘学期’、‘半年’],
‘年’:[5,‘年’、‘年’、‘无’]
},
距离:{
“公里”:[1,‘公里’、‘公里’、‘公里’、‘公里’],
“英里”:[2,“英里”,“英里],
‘北欧英里’:[3,‘北欧英里’、‘10公里’、‘斯堪的纳维亚英里’]
},
燃油量:{
‘ltr’:[1,‘l’、‘l’、‘l’、‘l’、‘l’、‘l’],
‘加仑(进口)’:[2,‘进口加仑’、‘英制加仑’、‘加仑(英国)’,
‘美国加仑’[3,‘美国加仑’、‘美国加仑’],
‘kWh’:[4,‘kWh’]
}
};
//此函数将每个输入映射到特定的定义值
功能映射单元(概念、值){
for(字典中的var键[概念]){
如果(键===值||
字典[概念][键].indexOf(值)!=-1){
返回键
}
}
抛出错误('Uknown'+value+'表示“'+concept+'”)
}
//你会告诉我们的