[英]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伪造的。
switch
是case
的典型翻译,但不是表达式。 不过,您可以在语句内部将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';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.