Alternar instruções múltiplas ocorrências em JavaScript

Eu preciso de vários casos na instrução switch em JavaScript, algo como:

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

Como eu posso fazer isso? Se não há como fazer algo assim em JavaScript, quero conhecer uma solução alternativa que também siga o conceito DRY .

Use o recurso fall-through da instrução switch . Um caso correspondente será executado até que uma break (ou o final da instrução switch ) seja encontrada, para que você possa escrever da seguinte forma:

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

Isso funciona no JavaScript comum

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

Felicidades.

Aqui está uma abordagem diferente, evitando a instrução switch :

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

Em Js para atribuir vários casos no switch Nós temos que definir different case without break como dado abaixo:

   

Por favor, veja o exemplo clique no link

Se você estiver usando ES6, você pode fazer isso:

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

Ou para versões anteriores do JavaScript, você pode fazer isso:

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

Note que isso não funcionará em navegadores antigos do IE, mas você pode consertar as coisas com bastante facilidade. Veja a questão determinar se a string está na lista em javascript para mais informações.

você pode usar o operador ‘ in ‘ …
depende da invocação de object / hash …
então é tão rápido quanto o javascript pode 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]() 

Aproveite, ZEE

Adicionando e esclarecendo a resposta de Stefano, você pode usar expressões para definir dinamicamente os valores para as condições em troca, por exemplo:

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

Então, no seu problema, você poderia fazer algo como:

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

apesar de não ser muito seco ..

No nó, parece que você tem permissão para fazer isso:

 data = "10"; switch(data){ case "1": case "2": case "3": //put multiple cases on the same line to save vertical space. console.log("small"); break; case "10": case "11": case "12": console.log("large"); break; default: console.log("strange"); break; } 

Isso faz com que o código seja muito mais compacto em alguns casos.

Depende. O switch é avaliado uma vez e somente uma vez. Após uma partida, todas as declarações de casos subseqüentes até ‘quebrar’ são triggersdas, independentemente do que o caso disser.

 var onlyMen = true; var onlyWomen = false; var onlyAdults = false; (function(){ switch (true){ case onlyMen: console.log ('onlymen'); case onlyWomen: console.log ('onlyWomen'); case onlyAdults: console.log ('onlyAdults'); break; default: console.log('default'); } })(); // returns onlymen onlywomen onlyadults 
  
 switch (myVariable) { case "A": case "B": case "C": // Do something break; case "D": case "E": // Do something else break; default: // Default case break; } 

Neste exemplo, se o valor de myVariable for A, B ou C, ele executará o código no caso “C” :.

Outra maneira de fazer vários casos na instrução switch, quando dentro de uma function

  function name(varName){ switch (varName) { case 'afshin': case 'saeed': case 'larry': return 'Hey'; default: return 'Default case'; } } console.log(name('afshin')); //Hey 

Eu uso assim:

 switch (sensor){ case /Pressure/g.test(sensor):{ console.log('Its pressure!'); break; } case /Temperature/g.test(sensor):{ console.log('Its temperature!'); break; } } 

Você poderia escrever assim:

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

Switch Case Example

Enter a Number Between 1 to 7


basta mudar a condição de interruptor aprroach

 switch (true) { case (function(){ return true; })(): alert('true'); break; case (function(){ return false; })(): alert('false'); break; default: alert('default'); }