Javascript相当于CASE表达式

时间:2017-08-07 07:56:25

标签: javascript

在SQL和PL / SQL中,我们可以像这样使用CASE 表达式

import re
rx = r'([^1]|13|113)'
s = input()
m = re.match(rx, s)
if m:
    print("Invalid")
else:
    print("Valid")

我在javascript中可以想到的这种类型的最简单的表达式是使用嵌套的三元运算符,如下所示:

y := case x
     when 1 then 'foo'
     when 5 then 'bar'
     when 7 then 'baz'
     else 'wak'
     end;

是否有更简单/更清晰的方式将此类事物形成为表达式

注意:我知道y = (x==1) ? "foo" :( (x==5) ? "bar" :( (x==7) ? "baz" : "wak" ))) 声明,但在这里我正在寻找表达式

6 个答案:

答案 0 :(得分:2)

使用switch声明:

switch(x) {
  case 1:
    y = 'foo';
    break;
  case 5:
    y = 'bar';
    break;
  case 7:
    y = 'baz';
    break;
  default:
    y = 'wak';
}

或者,如果你绝对需要一个表达式,你可以使用一个对象作为键值映射,如下所示:

y = {
    1: 'foo',
    5: 'bar',
    7: 'baz',
  }[x] || 'wak';

答案 1 :(得分:2)

您可以使用键值映射

y = {1: "foo", 5: "bar", 7: "then"}[x] || "wak";

或者如果地图较大或您使用的是假值,......

var map = {
    1: "foo",
    5: "bar",
    7: "then"
};

y = x in map? map[x]: "wak";

答案 2 :(得分:1)

您的搜索键是switch

  

switch语句计算表达式,将表达式的值与case子句匹配,并执行与该case相关的语句。

switch(x) {
    case 1:
        //code  
        break;
    case 5:
        //code  
        break;
    // more cases
    default:
       // code  
}

答案 3 :(得分:1)

使用object literal:

v = { ...  }[expression];


y = {1: 'foo', 5: 'bar', 7: 'baz'}[x] || 'wak';

警告:如果您需要如图所示的else子句,则任何案例值都不应该是Javascript假的。

答案 4 :(得分:1)

switchcase的典型翻译,但它不是表达式。但是,您可以在语句中分配给y。请注意,您需要break来阻止案例冒泡并返回下一个结果:

var y, x = 7;

switch (x) {
    case 1: y = 'foo'; break;
    case 5: y = 'bar'; break;
    case 7: y = 'baz'; break;
    default: y = 'wak'; break;
  }

console.log(y);

鉴于您正在寻找表达式,您可以创建一个函数:

function getY(x) 
{
  switch (x) {
    case 1: return 'foo';
    case 5: return 'bar';
    case 7: return 'baz';
    default: return 'wak';
  }
}
 
y = getY(7);
console.log(y);
或者,您可以使用arrow function

y = ((x) => {
  switch (x) {
    case 1: return 'foo';
    case 5: return 'bar';
    case 7: return 'baz';
    default: return 'wak';
  }})(7);
    
console.log(y);

使用Immediately-Invoked Function Expression (IIFE)之间也存在一种风味,但实际上它与其他两种风格相同。

答案 5 :(得分:-1)

我可能会建议一个如此处所示的开关语句

floor

https://www.w3schools.com/js/js_switch.asp