Prueba para múltiples casos en un interruptor, como un OR (||)


¿Cómo se utiliza un switch case cuando usted necesita probar para a o b en el mismo caso?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
Author: Xufox, 2011-06-29

6 answers

Puedes usar fall-through:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
 412
Author: kei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-04 17:08:48

Dado que las otras respuestas explicaban cómo hacerlo sin explicar realmente por qué funciona: {[18]]}

Cuando la switch se ejecuta, encuentra la primera sentencia case coincidente y luego ejecuta cada línea de código después del interruptor hasta que golpea una sentencia break o el final de la sentencia switch (o una sentencia return para dejar toda la función contenedora). Cuando omites deliberadamente el break para que el código debajo del siguiente case se ejecute también, se llama un fall-through. Así que para requisito del OP:

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

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

Olvidar incluir instrucciones break es un error de codificación bastante común y es lo primero que debe buscar si su switch no funciona de la manera que esperaba. Por esa razón a algunas personas les gusta poner un comentario para decir "fall through" para dejar en claro cuando se han omitido declaraciones de ruptura 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 fall-through:

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 caso default, que se ejecutará si ninguno de los otros casos coincide - si no incluye un default y ningún caso coincide, entonces no pasa nada. Usted puede (opcionalmente) caer a través del caso predeterminado.

Así que en mi segundo ejemplo si someVar es 1 llamaría someFunction() y luego verías cuatro alertas a medida que cae a través de múltiples casos, algunos de los cuales tienen alertas debajo de ellos. Es someVar es 3, 4 o 5 verías dos alertas. Si someVar es 7 verías "Algo más" y si es 8 o cualquier otro valor verías "El fin".

 102
Author: nnnnnn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 00:32:50

Necesitas hacer dos etiquetas case.

El control pasará de la primera etiqueta a la segunda, por lo que ambos ejecutarán el mismo código.

 13
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-28 21:59:06

¡Tienes que cambiarlo!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
 3
Author: Stefano Favero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-15 16:44:21

Olvídate de switch y break, vamos a jugar con if. Y en lugar de afirmar

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

Permite crear varios arrays con casos y comprobarlo con Array.prototipo.incluye()

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");
}
 2
Author: khex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 22:07:32

Use comas para separar mayúsculas y minúsculas

switch (pageid)
{
    case "listing-page","home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
 -4
Author: Dinesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-27 15:31:17