web-dev-qa-db-fra.com

Testez plusieurs cas dans un commutateur, comme un OR (||)

Comment utiliseriez-vous une switchcase lorsque vous devez tester a o b dans le même cas?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
214
Andres

Vous pouvez utiliser les retombées:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
495
kei

Puisque les autres réponses ont expliqué comment le faire sans expliquer réellement pourquoi cela fonctionne:

Lorsque switch est exécuté, il trouve la première instruction case correspondante, puis exécute chaque ligne de code après le commutateur jusqu'à ce qu'il obtienne une instruction break ou la fin de la switch (ou une instruction return). Lorsque vous omettez délibérément break afin que le code situé sous le prochain case soit exécuté également, il est appelé un fall-through. Donc, pour l'exigence du PO:

switch (pageid) {
   case "listing-page":
   case "home-page":
      alert("hello");
      break;

   case "details-page":
      alert("goodbye");
      break;
} 

Oublier d'inclure les instructions break est une erreur de codage assez courante et constitue la première chose à rechercher si votre switch ne fonctionne pas comme prévu. Pour cette raison, certaines personnes aiment ajouter un commentaire pour dire "échouer" pour indiquer clairement quand des déclarations de rupture ont été omises volontairement. Je fais cela dans l'exemple suivant, car il est un peu plus compliqué et montre comment certains cas peuvent inclure du code à exécuter avant qu'ils ne tombent à l'eau:

switch (someVar) {
   case 1:
      someFunction();
      alert("It was 1");
      // fall through
   case 2:
      alert("The 2 case");
      // fall through
   case 3:
      // fall through
   case 4:
      // fall through
   case 5:
      alert("The 5 case");
      // fall through
   case 6:
      alert("The 6 case");
      break;

   case 7:
      alert("Something else");
      break;

   case 8:
      // fall through
   default:
      alert("The end");
      break;
}

Vous pouvez également (éventuellement) inclure un cas default, qui sera exécuté si aucun des autres cas ne correspond - si vous n'incluez pas default et qu'aucun cas ne correspond, rien ne se passe. Vous pouvez (éventuellement) passer au cas par défaut.

Ainsi, dans mon deuxième exemple, si someVar vaut 1, il appellerait someFunction() et vous verriez alors quatre alertes car il survient dans plusieurs cas, dont certains contiennent des alertes. someVar vaut 3, 4 ou 5, vous verriez deux alertes. Si someVar est 7, vous verrez "Quelque chose d'autre" et s'il s'agit de 8 ou de toute autre valeur, vous verrez "La fin".

113
nnnnnn

Vous devez créer deux étiquettes case.

Le contrôle passera de la première étiquette à la seconde, de sorte qu'ils exécuteront le même code.

14
SLaks

Vous devez le changer!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
5
Stefano Favero

Oublier switch et break, permet de jouer avec if. Et au lieu d'affirmer

if(pageid === "listing-page" || pageid === "home-page")

permet de créer plusieurs tableaux avec des cas et de vérifier avec Array.prototype.includes ()

var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];

if(caseA.includes(pageid)) {
    alert("hello");
}
else if (caseB.includes(pageid)) {
    alert("goodbye");
}
else {
    alert("there is no else case");
}
3
khex