J'ai besoin de plusieurs cas dans l'instruction switch en JavaScript, quelque chose comme:
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
Comment puis je faire ça? S'il n'y a aucun moyen de faire quelque chose comme ça en JavaScript, je veux connaître une solution alternative qui suit également le concept DRY .
javascript
switch-statement
Afshin Mehrabani
la source
la source
Réponses:
Utilisez la fonction fall-through de l'
switch
instruction. Un cas correspondant s'exécutera jusqu'à ce qu'unbreak
(ou la fin de l'switch
instruction) soit trouvé, vous pouvez donc l'écrire comme suit:la source
switch('10') { case 1, '10': console.log('ok') }
imprimeok
switch(1)
. L'étiquette ici n'est qu'une expression virgule.Cela fonctionne en JavaScript standard
À votre santé.
la source
Voici une approche différente en évitant
switch
complètement la déclaration:la source
switch ... case
. Il est trop facile d'oublier unebreak
déclaration, et si vous utilisez intentionnellement une erreur, cesbreak
déclarations oubliées peuvent être très difficiles à repérer. Cette version de recherche de méthode possède également de nombreuses fonctionnalités intéressantesswitch ... case
, telles que l'extensibilité dynamique ou la possibilité de remplacer complètement l'objet pour effectuer le changement de mode. Il est également plus facile de rester organisé correctement et peut conduire à un code plus facile à gérer. Voir ericleads.com/2012/12/switch-case-considered-harmful//fallthrough
à la place debreak
chaque fois que j'omet intentionnellement lebreak
. Cela permet d'identifier quand c'est une erreur et quand c'est intentionnel.En Javascript pour attribuer plusieurs cas dans un commutateur, nous devons définir
different case without break inbetween
comme indiqué ci-dessous:S'il vous plaît voir l'exemple cliquez sur le lien
la source
Si vous utilisez ES6, vous pouvez le faire:
Ou pour les versions antérieures de JavaScript, vous pouvez le faire:
Notez que cela ne fonctionnera pas dans les anciens navigateurs IE, mais vous pouvez corriger les choses assez facilement. Voir la question déterminer si la chaîne est dans la liste en javascript pour plus d'informations.
la source
includes
mot? Faites votre choix.Dans le nœud, il semble que vous êtes autorisé à le faire:
Cela rend le code beaucoup plus compact dans certains cas.
la source
En ajoutant et en clarifiant la réponse de Stefano, vous pouvez utiliser des expressions pour définir de manière dynamique les valeurs des conditions dans switch, par exemple:
Donc, dans votre problème, vous pourriez faire quelque chose comme:
bien que n'étant pas tellement SEC ..
la source
varName
intérieur de l'expression case, attendez-vous à ce que varName soit mis en cache.vous pouvez utiliser l' opérateur ' in ' ...
repose sur l'invocation objet / hachage ...
donc c'est aussi rapide que javascript peut être ...
Profitez-en, ZEE
la source
J'utilise comme ça:
la source
g
drapeau, car vous n'utilisez les expressions régulières qu'une seule fois et vous les jetez. En fait, si vous les gardiez en dehors de la fonction, l'g
indicateur vous nuirait en essayant de faire une correspondance à partir d'un index non 0 sur les.test(
s suivants . J'ai également corrigé une faute de frappe où la casse du commutateur étaitsensor
variable et nontrue
constante pour faire correspondre les expressions booléennes. Voir l'édition.case /officedocument/.test(type) && /presentation/.test(type): iconClass = "far fa-file-powerpoint red"; break;
Ça dépend. Switch n'évalue qu'une seule fois. Lors d'un match, toutes les déclarations de cas ultérieures jusqu'à ce que «casser» se déclenchent, peu importe ce que dit le cas.
la source
J'aime cela pour la clarté et la syntaxe DRY.
la source
Je peux voir qu'il y a beaucoup de bonnes réponses ici, mais que se passe-t-il si nous devons vérifier plus de 10 cas? Voici ma propre approche:
la source
if (accessDenied.includes(varName)) return 'Access Denied!'; return 'Access Allowed.'
plus que suffisant.Le problème avec les approches ci-dessus est que vous devez répéter plusieurs
case
fois chaque fois que vous appelez la fonction qui a leswitch
. Une solution plus robuste consiste à avoir une carte ou un dictionnaire .Voici un exemple
la source
Tu peux le faire:
ou juste une seule ligne de code:
une petite amélioration de la réponse d'ErikE
la source
Pour tous ceux qui viennent ici avec un problème similaire que j'ai eu, que j'ai rencontré après des semaines de codage et un burn-out, ma situation ressemblait à:
Toujours le
default
cas entré. Si vous rencontrez un problème d'instruction de commutateur multi-cas similaire, ce que vous recherchez est:J'espère que cela aide quelqu'un, je tirais mes cheveux avant de me rappeler d'utiliser le boîtier de commutation de la même manière que je l'utilise dans mes réducteurs redux.
la source
Une des solutions possibles est:
la source
Pour moi, c'est la manière la plus simple:
la source
Une autre façon de faire plusieurs cas dans une instruction switch, à l'intérieur d'une fonction
la source
Vous pouvez l'écrire comme ceci:
la source
la source
switch
déclaration est censée fonctionner. C'est justecase "1":
, noncase (num = "1"):
.document.getElementById("result").innerHTML = ....
à l'extérieur du commutateur et ajouter le résultat de la valeur du jour à la fin?num
mais cela fonctionne toujours car leswitch
a déjà été évalué et l'affectation donne la valeur. C'est la programmation par mutation / apprentissage automatique à son meilleur.il suffit de changer l'approche de la condition de commutation
la source
(expression)
entre parenthèses, et la valeur de retour doit être l'entrée. Voir ma réponseswitch(true) { case (var1 === 0 && var2 === true): {} }