我有一个标准开关盒块:
switch(variable) {
case "option1":
alert("Option 1");
break;
case "option2":
alert("Option 2");
break;
}
我想运行此代码:
alert("Any Option");
当案例的 匹配时,是否有一种简单的方法可以运行此代码,而无需在每种情况下添加代码, 不带< / em> rechecking&#34;变量&#34; (即切换后不使用if语句?)
答案 0 :(得分:3)
有很多真正 hacky方法可以做你想要的事情(命名为带有break / continue的do循环,带有switch语句的递归函数等)但是最干净的方法是使用功能,如:
var variable = "option1";
function checkValue (val) {
switch (variable) {
case "option1":
alert("Option 1");
return true;
case "option2":
alert("Option 2");
return true;
default:
return false;
}
}
if (checkValue(variable)) {
// run common code
alert("Any option");
}
答案 1 :(得分:2)
答案 2 :(得分:1)
标记的块可以让您随时突破它。如果你突破default
的情况,你可以根据switch
语句在let variable = prompt("option1 or option2?");
select: {
switch(variable) {
case "option1":
alert("Option 1");
break;
case "option2":
alert("Option 2");
break;
default:
break select;
}
alert("Both Options");
}
语句之后运行一些代码,而不是根据要求重新匹配变量:
{{1}}&#13;
但是,我不推荐这个!标签使代码执行路径不太清晰。上面的代码是不可读的。重新检查变量是一种更好的方法。
答案 3 :(得分:1)
我认为我不会使用你描述的模式,但是这样的东西可以满足你的需求。
/**
* Use this method to simulate a "finally" statement in a
* method that resembles a switch
*
* @param {*} value - The value to compare
* @param {Array<*, boolean, function>} options - The collection of switch statements
* First value is the value to compare against the original value
* Second value specifies if this statement should behave like a break at its end
* Third value is the action to take when the value matches
* @param {function} finallyFn - The method which is run if any statement was executed
*/
function switchWithFinally(value, options, finallyFn) {
var matched = false,
breakSwitch = true;
for(var i = 0; i < options.length; i++) {
if(!breakSwitch || value === options[i][0]) {
options[i][2]();
matched = true;
breakSwitch = options[i][1];
}
}
if(matched) finallyFn();
}
/**
* Example call, should return
* Option 2
* Option 3
* Any option
*/
switchWithFinally(
'option2',
[
['option1', true, function() {
console.log('Option 1');
}],
['option2', false, function() {
console.log('Option 2');
}],
['option3', true, function() {
console.log('Option 3');
}]
],
function() {
console.log('Any option');
}
);
答案 4 :(得分:0)
为什么不在两种情况下调用函数?
switch(variable) {
case "option1":
dualAlert("Option 1");
break;
case "option2":
dualAlert("Option 2");
break;
}
function dualAlert(text){
alert(text);
alert('Common Alert');
}