JavaScript中的嵌套switch语句

35

在JavaScript中是否可能使用嵌套的switch语句。

我的代码有点像:

switch(id1)
{
case 1:
     switch(id2){
     case 1:{
        switch(id3){
        case 1:{}
        case 2:{}
        }
    }
     case 2:{
        switch(id4){
        case 1:{}
        case 2:{}
        }
     }
}
case 2:
}

如果是的话,那么这是一个好的实践方法,否则我们可以使用任何替代方案。


3
用同一变量进行切换没有意义。 - Nina Scholz
毫无疑问,我可以说这不是干净的代码。话虽如此,最好的方法取决于它实际上是关于什么的。 - Ingo Bürk
@NinaScholz 我认为这是伪代码。 - Ingo Bürk
1
它应该是可能的(不要忘记break语句)。推荐--但也许不是最佳选择。 - Scimonster
是的,这是伪代码。我正计划编写代码,并且作为要求,我正在准备编写代码。 - shanky singh
4个回答

60

你的方法完全没有问题。

你可以通过使用switch (true)来减少嵌套的复杂性:

switch (true) {
  case ((id1 === 1) && (id2 === 1) && (id3 === 1)) :
  case ((id1 === 1) && (id2 === 1) && (id3 === 2)) :
  case ((id1 === 1) && (id2 === 2) && (id3 === 1)) :
  case ((id1 === 1) && (id2 === 2) && (id3 === 2)) :
  case ((id1 === 2) && (id2 === 1) && (id3 === 1)) :
  case ((id1 === 2) && (id2 === 1) && (id3 === 2)) :
  case ((id1 === 2) && (id2 === 2) && (id3 === 1)) :
  case ((id1 === 2) && (id2 === 2) && (id3 === 2)) :
}

4
在case子句中,你可以省略括号。 - Nina Scholz
5
习惯的力量,妮娜。 :-) - Rounin

12

是的,您可以像这样使用内部开关:

请查看此演示:https://jsfiddle.net/1qsfropn/3/

var text;
var date = new Date()
switch (date.getDay()) {
 case 1:
 case 2:
 case 3:
 default:
    text = "Looking forward to the Weekend";
    break;
 case 4:
 case 5:
    text = "Soon it is Weekend";
    break;
 case 0:
 case 6:
      switch(date.getFullYear()){
      case 2015:
        text = "It is Weekend of last Year.";
      break;
      case 2016:
        text = "It is Weekend of this Year.";
      break;
      case 2017:
        text = "It is Weekend of next Year.";
      break;
      default:
      text = date.getDay();
      break;
    }
break;
}
document.getElementById("demo").innerHTML = text;`

6
你可以使用嵌套的switch语句,但这很容易变成一堆乱码,因此不推荐使用。我更喜欢使用带有嵌套switch语句的函数来清理代码,或者根据代码预期执行递归函数。
这只是伪代码,但我希望它能给你一些实现方法的想法。你必须小心使递归停止在某个给定值的ID上。如果ID的值为1,则此伪代码将ID的值增加1;如果ID的值为2,则增加2。如果值既不是1也不是2,则递归结束。
function recursiveSwitch(var id) {
    switch(id) {
       case 1: 
           recursiveSwitch(id + 1);
           break;
       case 2
          recursiveSwitch(id + 2)
          break;
       default:
          return;
     }
}

0
基本上,这是可能的,但我认为它取决于嵌套的复杂性,如果建议使用嵌套开关语句或使用具有嵌套开关语句的函数,正如Ómar Óskarsson所建议的那样。

这并不是一个真正的回答,你只是确认了Omar的答案。 - Shogunivar
1
@Shogunivar 不!实际上,我说这取决于复杂性! - Melchior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接