Javascript switch语句根据具体情况执行一些相同的功能

Javascript switch statement to excute some of the same functions depending on the case

在javascript中,我试图编写一个switch语句,它执行如下操作-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
swtich(n)
{
   case 1:
      functionW(); functionX(); functionY(); functionZ();
      break;
   case 2:
      functionX(); functionY(); functionZ();
      break;
   case 3:
      functionY(); functionZ();
      break;
   default:
      functionZ();
      break;
}

有更好的方法吗?


Frits van Campen的答案是接近您描述的相同功能。当我使用带/不带回退的开关时,总是有错误。如果n是我要使用的数字:

1
2
3
4
if(n >= 1){functionW();}
if(n >= 2){functionX();}
if(n >= 3){functionY();}
functionZ();

(我删除了我的第二个答案,因为Barmar表达得更好。)

编辑:

它可以修改为使用非数字:

1
2
3
4
5
var test = false
if(n === 1 || test){test = true; functionW();}
if(n === 2 || test){test = true; functionX();}
if(n === 3 || test){test = true; functionY();}
functionZ();


我只是想了一个不同的解决方案。

编写如下函数:

1
2
3
4
5
6
7
8
9
10
11
function functionW() {
    // do stuff
    functionX();
}

function functionX() {
    // do stuff
    functionY();
}

// etc

那么你就不需要一个故障转移,你可以有一个开关箱,有断开。

仅仅因为您定义了诸如functionWfunctionX等函数,并且需要以这种方式调用它们,并不意味着您的函数组合一定是好的。


不要使用switch,而是考虑遍历一个调度表:

1
2
3
4
var functions = [ functionW, functionX, functionY, functionZ ];
for (i = n; i < functions.length; i++) {
    functions[i]();
}

在这种情况下,n应该以0而不是1开始。如果functionZ()确实适用于所有大于3的值,则可以在循环开始时将n设为上限:

1
for (i = (n >= functions.length ? functions.length-1 : n); i < functions.length; i++) {


拆卸break

这些案件将失败。

确保您明确地注意到,您不希望break,因为它可能看起来像一个bug。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(n)
{
   case 1:
      functionW();
      // dont break
   case 2:
      functionX();
      // dont break
   case 3:
      functionY();
      // dont break
   default:
      functionZ();
      // dont break
}

如果n1它将执行functionW(),然后通过case 2执行functionX();等……