javascript 2 个布尔值的 switch-case
javascript switch-case for 2 booleans
我有 2 个布尔值,boolA 和 boolB。
我想要一个单独的 switch-case 语句,它采用四种可能的组合中的每一种,
即类似
switch(boolA boolB){
case 0 0:
[do something];
case 0 1:
[do something else];
case 1 0:
[do another thing];
case 1 1:
[do the other thing];
基本上我希望 switch-case 将两个布尔值解释为一个 2 位数字。
更新:我决定只使用普通的 if-else 东西。
我不认为我会那样做。
但是如果你真的想要,你可以使用boolA + " " + boolB
:
switch(boolA + " " + boolB){
case "false false":
[do something];
break;
case "false true":
[do something else];
break;
case "true false":
[do another thing];
break;
default: // "true true"
[do the other thing];
break;
}
或者如果您更喜欢数字,(10 * boolA) + boolB
:
switch((10 * boolA) + boolB){
case 0:
[do something];
break;
case 1:
[do something else];
break;
case 10:
[do another thing];
break;
default: // 11
[do the other thing];
break;
}
规范保证了这两种隐式转换。
Mozilla MDN 文档参考了此方法,通过使开关求值 true
然后将逻辑放入开关语句中来实现您想要的效果
switch (true) { // invariant TRUE instead of variable foo
case a && b:
//logic
break;
case a && !b:
//logic
break;
case !a && b:
//logic
break;
case !a && !b:
//logic
break;
}
我会使用常规的 if-else if 逻辑来使事情更清楚。
另一种实现方式是根本不使用 switch 语句。您可以创建一个 javascript 对象映射布尔值作为函数对象的键。
var truthTable = {
false: {
false: falsefalseFunc,
true: falsetruefunc
},
true: {
false: truefalseFunc,
true: truetrueFunc
}
}
其中 falsefalseFunc、falsetrueFunc 等...是函数对象。然后你可以这样称呼它:
truthTable[boolA][boolB]();
我决定使用
switch(parseInt(boolB.toString()+boolA,2)){
case 0://neither
[do something];
case 1://boolA
[do something else];
case 2://boolB
[do another thing];
case 3://both
[do the other thing];
}
它将布尔值解析为二进制数中的位。
ES6 替代结合 unary + operator:
switch (`${+boolA}${+boolB}`) {
case "00": //logic
break;
case "10": //logic
break;
case "01": //logic
break;
case "11": //logic
break;
}
我有 2 个布尔值,boolA 和 boolB。 我想要一个单独的 switch-case 语句,它采用四种可能的组合中的每一种, 即类似
switch(boolA boolB){
case 0 0:
[do something];
case 0 1:
[do something else];
case 1 0:
[do another thing];
case 1 1:
[do the other thing];
基本上我希望 switch-case 将两个布尔值解释为一个 2 位数字。
更新:我决定只使用普通的 if-else 东西。
我不认为我会那样做。
但是如果你真的想要,你可以使用boolA + " " + boolB
:
switch(boolA + " " + boolB){
case "false false":
[do something];
break;
case "false true":
[do something else];
break;
case "true false":
[do another thing];
break;
default: // "true true"
[do the other thing];
break;
}
或者如果您更喜欢数字,(10 * boolA) + boolB
:
switch((10 * boolA) + boolB){
case 0:
[do something];
break;
case 1:
[do something else];
break;
case 10:
[do another thing];
break;
default: // 11
[do the other thing];
break;
}
规范保证了这两种隐式转换。
Mozilla MDN 文档参考了此方法,通过使开关求值 true
然后将逻辑放入开关语句中来实现您想要的效果
switch (true) { // invariant TRUE instead of variable foo
case a && b:
//logic
break;
case a && !b:
//logic
break;
case !a && b:
//logic
break;
case !a && !b:
//logic
break;
}
我会使用常规的 if-else if 逻辑来使事情更清楚。
另一种实现方式是根本不使用 switch 语句。您可以创建一个 javascript 对象映射布尔值作为函数对象的键。
var truthTable = {
false: {
false: falsefalseFunc,
true: falsetruefunc
},
true: {
false: truefalseFunc,
true: truetrueFunc
}
}
其中 falsefalseFunc、falsetrueFunc 等...是函数对象。然后你可以这样称呼它:
truthTable[boolA][boolB]();
我决定使用
switch(parseInt(boolB.toString()+boolA,2)){
case 0://neither
[do something];
case 1://boolA
[do something else];
case 2://boolB
[do another thing];
case 3://both
[do the other thing];
}
它将布尔值解析为二进制数中的位。
ES6 替代结合 unary + operator:
switch (`${+boolA}${+boolB}`) {
case "00": //logic
break;
case "10": //logic
break;
case "01": //logic
break;
case "11": //logic
break;
}