在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"
)))
声明,但在这里我正在寻找表达式。
答案 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)
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);
使用Immediately-Invoked Function Expression (IIFE)之间也存在一种风味,但实际上它与其他两种风格相同。
答案 5 :(得分:-1)