繁体   English   中英

相当于CASE表达式的Javascript

[英]Javascript equivalent of CASE expression

在SQL和PL / SQL中,我们可以使用如下CASE 表达式

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

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

y = (x==1)
    ? "foo"
    :( (x==5)
       ? "bar"
       :( (x==7)
          ? "baz"
          : "wak"
          )))

有没有更简单/更清晰的方法来将这种事物表达表达式

注意:我了解switch 语句 ,但是在这里我正在寻找一个表达式

使用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';

您可以使用键值映射

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

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

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

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

您搜索的关键是switch

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

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

使用对象文字:

v = { ...  }[expression];


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

注意:如果需要显示的else子句,则所有case值都不应该是Javascript伪造的。

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); 
另外,您可以使用箭头功能

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

在使用立即调用函数表达式(IIFE)之间也有一种风格,但从本质上讲,它与其他两个函数相同。

我可能会建议如下所示的switch语句

var y;
switch(expression) {
    case 1:
    y = 'foo';
    break;
case 5:
    y = 'bar';
    break;
default:
    y = 'wak';
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM