Pruebe varios casos en un conmutador, como un OR (||)

Resuelto Andres asked hace 13 años • 7 respuestas

¿Cómo usarías a switch casecuando necesitas probar a o b en el mismo caso?

switch (pageid) {
  case "listing-page":
  case "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
Andres avatar Jun 29 '11 04:06 Andres
Aceptado

Puedes utilizar el método fallido:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
kei avatar Jun 28 '2011 21:06 kei

Dado que las otras respuestas explicaron cómo hacerlo sin explicar por qué funciona:

Cuando se switchejecuta, encuentra la primera casedeclaración coincidente y luego ejecuta cada línea de código después del cambio hasta que llega a una breakdeclaración o al final de switch(o una returndeclaración para dejar toda la función que contiene). Cuando se omite deliberadamente el breakcódigo del siguiente casetambién se ejecuta, se denomina falla . Entonces, para el requisito del OP:

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

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

Olvidarse de incluir breakdeclaraciones es un error de codificación bastante común y es lo primero que debe buscar si switchno funciona como esperaba. Por esa razón, a algunas personas les gusta poner un comentario que diga "fallar" para dejar claro cuando las declaraciones de ruptura se han omitido a propósito. Lo hago en el siguiente ejemplo ya que es un poco más complicado y muestra cómo algunos casos pueden incluir código para ejecutar antes de que fallen:

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

También puede (opcionalmente) incluir un defaultcaso, que se ejecutará si ninguno de los otros casos coincide; si no incluye un caso defaulty ningún caso coincide, no sucede nada. Puede (opcionalmente) pasar al caso predeterminado.

Entonces, en mi segundo ejemplo, si someVares 1, llamaría someFunction()y luego vería cuatro alertas a medida que pasa por varios casos, algunos de los cuales tienen alertas debajo. Si someVarson 3, 4 o 5, verás dos alertas. Si someVares 7 verás "Algo más" y si es 8 o cualquier otro valor verás "El final".

nnnnnn avatar Jun 29 '2011 00:06 nnnnnn

¡Tienes que cambiarlo!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
Stefano Favero avatar Dec 15 '2015 16:12 Stefano Favero

Olvídate switchy breakjuguemos con if. Y en lugar de afirmar

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

creemos varias matrices con casos y verifíquelas con 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");
}
khex avatar May 06 '2017 21:05 khex