Pregunta Cambiar la declaración de casos múltiples en JavaScript


Necesito varios casos en la declaración de cambio en JavaScript, algo así como:

switch (varName)
{
   case "afshin", "saeed", "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
       break;
}

¿Cómo puedo hacer eso? Si no hay forma de hacer algo como eso en JavaScript, quiero saber una solución alternativa que también sigue Concepto DRY.


506
2017-11-03 09:43


origen


Respuestas:


Utilice la función de ocultación de switch declaración. Un caso combinado se ejecutará hasta que break (o al final de la switch declaración) se encuentra, por lo que podría escribirlo como:

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
}

1014
2017-11-03 09:44



Esto funciona en JavaScript regular

function theTest(val) {
  var answer = "";
  switch( val ) {
    case 1: case 2: case 3:
      answer = "Low";
      break;
    case 4: case 5: case 6:
      answer = "Mid";
      break;
    case 7: case 8: case 9:
      answer = "High";
      break;
    default:
      answer = "Massive or Tiny?";
  } 
  return answer;  
  }

  theTest(9);

Aclamaciones.


52
2018-01-17 02:15



Aquí hay un enfoque diferente para evitar switch declaración en general:

var cases = {
  afshin: function() { alert('hey'); },
  _default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;

cases[ varName ] ? cases[ varName ]() : cases._default();

43
2017-11-03 09:55



En Js para asignar múltiples casos en el interruptor Tenemos que definir different case without break como se indica a continuación:

   <script type="text/javascript">
      function checkHere(varName){
        switch (varName)
           {
           case "saeed":
           case "larry":
           case "afshin":
                alert('Hey');
                break;
          case "ss":
             alert('ss');
             break;
         default:
             alert('Default case');
             break;
       }
      }
     </script>

Por favor, vea el ejemplo, haga clic en enlazar


14
2017-11-03 09:53



Si está utilizando ES6, puede hacer esto:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}

O para versiones anteriores de JavaScript, puede hacer esto:

if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}

Tenga en cuenta que esto no funcionará en los navegadores IE más antiguos, pero podría arreglar las cosas con bastante facilidad. Ver la pregunta determinar si la cadena está en la lista en javascript para más información.


10
2017-07-30 20:11



puedes usar el 'en'operador ...
se basa en la invocación de objeto / hash ...
así que es tan rápido como javascript puede ser ...

// assuming you have defined functions f(), g(a) and h(a,b) 
// somewhere in your code
// you can define them inside the object but... 
// the code becomes hard to read, I prefer this way

o = { f1:f, f2:g, f3:h };

// if you use "STATIC" code can do:
o['f3']( p1, p2 )

// if your code is someway "DYNAMIC", to prevent false invocations
// m brings the function/method to be invoked (f1, f2, f3)
// and you can rely on arguments[] to solve any parameter problems
if ( m in o ) o[m]()

Disfruta, ZEE


5
2017-09-06 12:51



Al agregar y aclarar la respuesta de Stefano, puede usar expresiones para establecer dinámicamente los valores de las condiciones en el interruptor, p. Ej .:

var i = 3
switch (i) {
    case ((i>=0 && i<=5)?i:-1): console.log('0-5'); break;
    case 6: console.log('6');
}

Entonces, en su problema, podría hacer algo como:

var varName = "afshin"
switch (varName) {
    case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
      console.log("hey");
      break;

    default:
      console.log('Default case');
}

aunque no tanto DRY ...


4
2017-12-06 15:10