带有条件OR运算符的简写开关语句

时间:2013-11-29 11:50:52

标签: javascript jquery

有可能吗?例如,'a'或'b'等于'X'。如果'c'或'd'或'e'等于'Y'

var qwerty = function() {
    var month = 'a';
    var cases = {
      'a' || 'b' : month = 'X',
      'c' || 'd' || 'e' : month = 'Y'
    };
    if (cases[month]) {
      cases[month]();
    }
    return month;
};

console.log( qwerty() );

提前谢谢你:)

4 个答案:

答案 0 :(得分:6)

switch语句中没有'或',因此。但你可以这样堆积你的案例:

switch(month){
    case 'a': case 'b':
        month = 'X'; break;
    case 'c': case 'd': case 'e':
        month = 'Y'; break;
}

答案 1 :(得分:6)

不确定你的方法应该返回什么(现在它只返回'a')。这是一个可能的重写,用于演示使用快捷方式布尔评估的切换:

var qwerty = function(month) {
  return { month: /[ab]/.test(month) && 'X' || 
                  /[cde]/i.test(month) && 'Y' || 
                  'NOPES'};
};
qwerty('b').month; //=> 'X'
qwerty('x').month; //=> 'NOPES'

答案 2 :(得分:1)

您可以尝试以下代码,

switch (varName)
{
   case "a":
   case "b":
       alert('X');
       break;
   case "c":
   case "d":
   case "e":
       alert('Y');
       break;
}

答案 3 :(得分:0)

KooiInc的答案非常酷,但它有一个很大的问题。代码将开关转换为正则表达式。我在Mozilla上的Javascript中使用KooiInc的代码循环10,000,000次并且等效的switch语句运行相同的次数。在几次循环迭代之后,switch语句的平均运行时间为21ms。 KooiInc的正则表达式的平均运行时间为2494毫秒。那速度接近17,000%。

我喜欢野外代码,我非常喜欢KooiInc解决方案的外观,但实际应用的开销太高了。我运行的代码如下,计时器位于底部。结果显示在JavaScript控制台中。

return{U:/[2]/.test(Units)&&(t=t*dpi)||/[3]/.test(Units)&&(t=t*dpi*2.54)||/[4]/.test(Units)&&(t=t*dpi*25.4)||t};

// ======================================

switch(Units)
{
    case 2: //inches
    t=t*dpi;
        break;
    case 3: //cm
        t=t*dpi*2.54;
        break;
    case 4: //mm
        t=t*dpi*25.4;
        break;
}
return t;

// ======================================

console.time("test");
for (z=0;z<10000000;z++)
{
    pU(10);
}
console.timeEnd("test");