Как выполнить несколько блоков кода в определенных случаях в операторе switch?
У меня есть заявление о переключении, как это:
switch(a) {
case 0:
// do something
break;
case 1:
// do something else
break;
}
Что я хочу сделать, это выполнить оба блока кода, когда a == 2
например. Я хотел бы написать что-то вроде этого:
switch(a) {
case 0:
case 2:
// do something
break;
case 1:
case 2:
// do something else
break;
}
но очевидно, что это не работает, потому что первый оператор break завершает весь оператор switch.
Единственным способом, которым я мог придумать, было написание вспомогательных функций:
function case0() {
// do something
}
function case1() {
// do something else
}
switch(a) {
case 0:
case0();
break;
case 1:
case1();
break;
case 2:
case0();
case1();
break;
}
Это решение кажется мне многословным и безобразным. Есть ли лучший способ добиться того, чего я хочу?
2 ответа
В switch
код оператора выполняется, начиная с первого истинного условия до ближайшего break
, Так что в вашем случае может сработать следующая конструкция.
var a = 2;//1;//0;//-1;
switch(a){
case 2: //and also one and zero
console.log('two');
case 1: //and also zero
console.log('one');
case 0: //zero only
console.log('zero');
break;
default: //no matches
console.log('default');
}
Вы спросили, есть ли лучший способ достичь того, что вы хотели...
Хорошо, то, подходит ли мое решение, зависит от вашего определения "лучше", но здесь оно так или иначе:
Вы можете сделать свой оператор switch следующим образом:
switch(a) {
case 0:
caseHandler([0]);
break;
case 1:
caseHandler([1]);
break;
case 2:
caseHandler([0,1]);
break;
}
И передать массив значений в одну вспомогательную функцию, которая использует другой переключатель:
function caseHandler(values) {
for (var i = 0; i < values.length; i++) {
switch (values[i]) {
case 0:
console.log('doing zero stuff');
break;
case 1:
console.log('doing one stuff');
break;
}
}
}