Gio*_*nkl 1 javascript if-statement destructuring switch-statement ecmascript-6
有没有办法在switch ... case语句中使用解构功能,而不是使用嵌套的if else语句?
例如,我期望这样的事情:
const tall = true;
const clean = true;
switch ([tall, clean]) {
case [true,true]:
console.log("Perfect");
break;
case [false,true]:
console.log("Ok");
break;
case [true,false]:
console.log("Not so good");
break;
default:
console.log("Terrible");
}
Run Code Online (Sandbox Code Playgroud)
而不是使用:
if (tall){
if (clean){
...
}else{
...
}
}else{
if (clean){
...
}else{
...
}
}
Run Code Online (Sandbox Code Playgroud)
不,这与解构无关,不,您不能在switch
语句中使用数组文字,因为不同的对象永远不会比较相等。
在这种情况下,您可以做的是将两个布尔值映射到一个整数分数:
switch (clean * 2 + tall) {
case 3:
console.log("Perfect");
break;
case 2:
console.log("Ok");
break;
case 1:
console.log("Not so good");
break;
case 0:
console.log("Terrible");
}
Run Code Online (Sandbox Code Playgroud)
或等效的数组查找:
console.log(["Terrible", "Not so good", "Ok", "Perfect"][clean * 2 + tall]);
Run Code Online (Sandbox Code Playgroud)
您甚至可能希望使按位魔术更明显:
switch (tall << 1 | clean << 0) {
case true << 1 | true << 0:
console.log("Perfect");
break;
case false << 1 | true << 0:
console.log("Ok");
break;
case true << 1 | false << 0:
console.log("Not so good");
break;
case false << 1 | false << 0:
console.log("Terrible");
break;
}
Run Code Online (Sandbox Code Playgroud)
您也可以function score(a, b) { return a << 1 | b << 0 }
同时在switch
和中调用帮助程序case
。