我想在switch case语句中使用一个变量,例如,我无法做到这一点。你能帮忙吗?
switch(basket,pay){
case true, true:
blah blah...
break;
case false,true:
blah blah..
break;
case false, false:
blah blah...
break;
}
我想在switch case语句中使用一个变量,例如,我无法做到这一点。你能帮忙吗?
switch(basket,pay){
case true, true:
blah blah...
break;
case false,true:
blah blah..
break;
case false, false:
blah blah...
break;
}
你需要的是标志位和位掩码。基本上,你可以将多个伪布尔值存储在同一个变量中,并访问它们的组合条件。这个方法的好处在于可以将多个属性组合成一个变量。当需要跟踪大量布尔属性时,这种方法非常方便。
var FLAG_BASKET = 0x1; // 0001
var FLAG_PAY = 0x2; // 0010
//set them both to pseudo-true
var flags = FLAG_BASKET | FLAG_PAY;
switch (flags){
case 0x0://both are false
case 0x1://basket is true, pay is false
case 0x2://basket is false, pay is true
case 0x3://both are true
}
原始问题可以使用 switch
来编写:
switch (true) {
case basket && pay:
// both true
break;
case basket && !pay:
// basket true, pay false
break;
case !basket && pay:
// basket false, pay true
break;
case !basket && !pay:
// basket false, pay false
break;
}
for(var i = 0, l = myArray.length; i < l; ++i) {
...
}
switch(pay){
case true:
blah blah...
break;
case true:
blah blah..
break;
case false:
blah blah...
break;
}
老实说,你的switch语句似乎并不必要。只需使用一些简单的if
语句即可:
if (basket && pay) {
// code
} else if (pay) {
// code
} else {
// code
}
使用这个解决方案,您可以向开关提供多个参数:
const a = "foo";
const b = true;
const c = null;
const condition = JSON.stringify({ a, b, c });
function mySwitch(condition) {
switch (condition) {
case JSON.stringify({
a: "foo",
b: true,
c: true
}):
return 'case { a: "foo", b: true, c: null }';
case JSON.stringify({
a: "foo",
b: true,
c: null
}):
return 'case { a: "foo", b: true, c: null }';
default:
return 'default';
}
}
console.log("condition:", condition);
console.log("result:", mySwitch(condition));
除了对象作为条件,数组也可以使用,但是使用此解决方案的缺点是必须将完整的开关条件值传递给开关情况条件。例如,如果开关情况关心示例中的属性a
和b
而不是c
,则此解决方案将无法工作。但是,如果您确定c
对于您的情况始终具有特定值,则可以使用此解决方案。
由于OP的示例代码包括每个情况的重复参数数量,因此此解决方案可能会帮助您在开关中提供多个参数的可能性。