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 .
javascript
switch-statement
Afshin Mehrabani
fonte
fonte
Respostas:
Use o recurso de detalhamento da
switch
declaração. Um caso correspondente será executado até que umbreak
(ou o final daswitch
instrução) seja encontrado, para que você possa escrever como:fonte
switch('10') { case 1, '10': console.log('ok') }
impressõesok
switch(1)
. O rótulo aqui é apenas uma expressão de vírgula.Isso funciona em JavaScript regular
Felicidades.
fonte
Aqui está uma abordagem diferente, evitando a
switch
declaração completamente:fonte
switch ... case
. É muito fácil esquecer umabreak
declaração e, se você usar o intencionalmente, essasbreak
declarações esquecidas podem ser muito difíceis de identificar. Essa versão de pesquisa de método também possui muitos recursos excelentesswitch ... case
, como extensibilidade dinâmica ou a capacidade de substituir completamente o objeto para realizar a alternância de modo. Também é mais fácil manter-se organizado de maneira limpa e pode levar a um código mais sustentável. Veja ericleads.com/2012/12/switch-case-considered-harmful//fallthrough
no lugar debreak
sempre que eu omitir intencionalmentebreak
. Isso ajuda a identificar quando é um erro e quando é intencional.No Javascript, para atribuir vários casos em um comutador, temos que definir os
different case without break inbetween
dados abaixo:Veja o exemplo, clique no link
fonte
Se você estiver usando o ES6, poderá fazer o seguinte:
Ou para versões anteriores do JavaScript, você pode fazer isso:
Observe que isso não funcionará em navegadores IE mais antigos, mas você pode consertar as coisas com bastante facilidade. Consulte a pergunta para determinar se a string está na lista em javascript para obter mais informações.
fonte
includes
palavra? Faça sua escolha.No nó, parece que você tem permissão para fazer isso:
Isso torna o código muito mais compacto em alguns casos.
fonte
Adicionando e esclarecendo a resposta de Stefano, você pode usar expressões para definir dinamicamente os valores para as condições no switch, por exemplo:
Portanto, no seu problema, você pode fazer algo como:
embora não seja tão SECO ..
fonte
varName
dentro da expressão de caso, espere que varName seja armazenado em cache.você pode usar o operador ' in ' ...
depende da invocação de objeto / hash ...
então é o mais rápido que o javascript pode ser ...
Aproveite, ZEE
fonte
Eu uso assim:
fonte
g
bandeira, pois só usa as expressões regulares uma vez e as joga fora. De fato, se você os mantivesse fora da função, og
sinalizador o prejudicaria ao tentar corresponder a partir de um índice diferente de 0 nos.test(
s subsequentes . Também corrigi um erro de digitação em que o caso do comutador estava nasensor
variável e nãotrue
constante para corresponder expressões booleanas. Veja a edição.case /officedocument/.test(type) && /presentation/.test(type): iconClass = "far fa-file-powerpoint red"; break;
Depende. O switch avalia uma vez e apenas uma vez. Em uma partida, todas as declarações de caso subsequentes até o 'break' disparam, não importa o que o caso diga.
fonte
Eu gosto disso por clareza e sintaxe DRY.
fonte
Percebo que há muitas boas respostas aqui, mas o que acontece se precisarmos verificar mais de 10 casos? Aqui está minha própria abordagem:
fonte
if (accessDenied.includes(varName)) return 'Access Denied!'; return 'Access Allowed.'
é mais que suficiente.O problema com as abordagens acima é que você deve repetir os vários
case
s toda vez que chamar a função que possui oswitch
. Uma solução mais robusta é ter um mapa ou um dicionário .Aqui um exemplo
fonte
Você consegue fazer isso:
ou apenas uma única linha de código:
um pouco de melhoria da resposta de ErikE
fonte
Para quem vem aqui com um problema semelhante que já tive, depois de semanas de codificação e exaustão, minha situação era algo parecido com:
Sempre o
default
caso inserido. Se você estiver enfrentando um problema semelhante de instrução de comutador de vários casos, o que procura é:Espero que isso ajude alguém, eu estava arrancando meu cabelo antes de lembrar de usar a caixa do interruptor da mesma maneira que em meus redutores de redux.
fonte
Uma das soluções possíveis é:
fonte
Para mim, esta é a maneira mais simples:
fonte
Outra maneira de executar vários casos na instrução switch, quando dentro de uma função
fonte
Você poderia escrever assim:
fonte
fonte
switch
declaração deve funcionar. É só quecase "1":
nãocase (num = "1"):
.document.getElementById("result").innerHTML = ....
fora da chave e adicionar o resultado do valor do dia no final?num
mas ainda funciona porque oswitch
já foi avaliado e a atribuição gera o valor. Isso é programação por mutação / aprendizado de máquina no seu melhor.basta mudar a condição da chave
fonte
(expression)
entre parênteses, e o valor de retorno deve ser a entrada. Veja minha respostaswitch(true) { case (var1 === 0 && var2 === true): {} }