webentwicklung-frage-antwort-db.com.de

Verschachtelte switch-Anweisung in Javascript

Ist es möglich, verschachtelte switch-Anweisungen in Javascript zu verwenden.

Mein Code sieht so aus 

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

Wenn ja, ist es eine gute Praxis, oder wir können einen anderen Ansatz verwenden.

14
shanky singh

Ihr Ansatz ist absolut in Ordnung.

Sie können die switch-Verschachtelung mit switch (true) weniger komplex gestalten:

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)) :
}
22
Rounin

Ja, Sie können den inneren Schalter auf diese Weise verwenden.

Bitte überprüfen Sie diese Demo: 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;`
4
Joey Etamity

Sie können eine verschachtelte switch-Anweisung verwenden, die jedoch schnell zu einem Spaghetti-Code wird und daher nicht empfohlen wird. Ich würde eher Funktionen mit der geschachtelten switch-Anweisung zur Code-Freigabe verwenden oder vielleicht rekursive Funktionen verwenden, je nachdem, was der Code tun soll.

Dies ist nur ein Pseudo-Code, aber ich hoffe, er gibt Ihnen eine Vorstellung davon, wie er implementiert werden soll. Sie müssen vorsichtig sein, damit die Rekursion bei einem bestimmten Wert der ID angehalten wird. Dieser Pseudocode erhöht den Wert der ID um 1, wenn der Wert der ID 1 ist, und erhöht sich um 2, wenn der Wert 2 ist. Wenn der Wert nicht 1 oder 2 ist, endet die Rekursion.

function recursiveSwitch(var id) {
    switch(id) {
       case 1: 
           recursiveSwitch(id + 1);
           break;
       case 2
          recursiveSwitch(id + 2)
          break;
       default:
          return;
     }
}
3

Grundsätzlich ist es möglich, aber ich denke, es hängt von der Komplexität der Verschachtelung ab, ob es empfohlen wird, geschachtelte switch-Anweisung zu verwenden oder Funktionen mit der verschachtelten switch-Anweisung zu verwenden wie Ómar Óskarsson vorgeschlagen hat.