如何在switch语句中执行多个代码块?

时间:2016-07-27 17:34:14

标签: javascript switch-statement code-structure

我有一个这样的开关语句:

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 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分:0)

你问是否有更好的方式来实现你想要的......

那么,我的解决方案是否合格取决于你对“更好”的定义,但无论如何它都在这里:

你可以像这样制作你的开关语句:

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;
    }
  }
}