Alternatives imbriquées opérateur ternaire en JS
Personnellement, j'aime ternaire opérateurs, et à mon humble avis, ils font des expressions complexes très facile à digérer. Prenez celui-ci:
word = (res.distance === 0) ? 'a'
: (res.distance === 1 && res.difference > 3) ? 'b'
: (res.distance === 2 && res.difference > 5 && String(res.key).length > 5) ? 'c'
: 'd';
Toutefois, dans notre projet de ESLINT règles imbriquées ternaire opérateurs sont interdits, donc je dois me débarrasser de ce qui précède.
J'essaie de trouver des alternatives à cette approche. Je n'ai vraiment pas envie de le transformer en un énorme if /else, mais ne sais pas si il y a d'autres options.
Peut-être un
Si vous pensez qu'ils font expressions complexes faciles à digérer, il suffit de désactiver cette stupide eslint règle.
Je suis en train de faire sur la base d'un eslint jeu de règles qui n'est pas à moi de décider.
Peut-être consulter les cette approche si vous voulez éviter de
Il pourrait être
switch
déclaration qu'il regarde comme il y a quelques scénarios que vous souhaitez évaluer: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Si vous pensez qu'ils font expressions complexes faciles à digérer, il suffit de désactiver cette stupide eslint règle.
Je suis en train de faire sur la base d'un eslint jeu de règles qui n'est pas à moi de décider.
Peut-être consulter les cette approche si vous voulez éviter de
if/else
et aussi comme des expressionsIl pourrait être
['a', res.difference > 3 && 'b', res.difference > 5 && String(res.key).length > 5 && 'c'][res.distance] || 'd'
, mais si nous avions appeler "raisonnables" est discutable 🙂OriginalL'auteur dthree | 2015-08-29
Vous devez vous connecter pour publier un commentaire.
Vos solutions de rechange ici sont essentiellement:
if
/else
vous ne voulez pas faireswitch
combiné avecif
/else
J'ai essayé de trouver avec une recherche de l'option de carte, mais il est devenu déraisonnable assez rapidement.
J'irais pour le #1, il n'est pas aussi grand:
Si toutes les accolades et la taille verticale de vous déranger, sans eux, c'est presque aussi concis que l'opérateur conditionnel version:
(Je ne dis pas que je n'ai jamais préconisent de laisser hors tension de l'appareil ou de mettre l'instruction à la suite d'une
if
sur la même ligne, mais d'autres ont des styles différents points de vue.)#2 est, à mon avis, le plus maladroit, mais c'est probablement plus un style de commentaires que d'autre chose:
Et enfin, et je suis pas la promotion de ce, vous pouvez profiter du fait que JavaScript est
switch
est inhabituel dans le B-syntaxe de la langue de la famille: Lecase
déclarations peuvent être expressions, et sont comparées à la valeur du paramètre dans le code source de commande:Comment moches, c'est qui? 🙂
Il y a plusieurs façons différentes, nous arrivons à
'd'
, ce qui rend la tâche la plus simple. Sinon, nous avons un conditionnel dans les deux1
et2
cas et répétez'd'
trois fois; la première ne me dérange pas tant que ça, mais ce dernier est un problème de maintenance en attente de se produire.Parfait ! je suppose que c'est la différence entre les approches de développeur moyen et T. J. Crowder !
LOL
Je pense qu'il voulait vraiment dire B.
OriginalL'auteur T.J. Crowder
À mon goût, soigneusement structurées imbriquée ternaire bat tous ceux désordre fi et commutateurs:
OriginalL'auteur Andrey Mikhaylov - lolmaus
C'est une vieille question, mais c'est la façon dont je le ferais... je voudrais commencer par le cas par défaut, puis modifiez la variable ou passer inchangée, comme souhaité.
OriginalL'auteur K McCabe
Vous pourriez écrire une immédiatement appelé la fonction d'expression pour le rendre un peu plus lisible:
Lien vers repl
OriginalL'auteur Yo Wakita
J'ai fait face à ce trop récemment et une recherche sur google m'a conduit ici, et je veux partager quelque chose que j'ai découvert récemment:
a && b || c
est presque la même chose que
a ? b : c
tant que
b
est truthy. Sib
n'est pas truthy, vous pouvez contourner le problème en utilisant!a && c || b
si
c
est truthy.La première expression est évaluée comme
(a && b) || c
comme&&
a plus de priorité que||
.Si
a
est truthy puisa && b
permettrait d'évaluer àb
sib
est truthy, donc l'expression devientb || c
qui évalue àb
si c'est truthy, tout commea ? b : c
serait sia
est truthy, et sia
n'est pas truthy alors l'expression d'évaluer àc
que nécessaire.Alternance entre les
&&
et||
truc et?
et||
dans les couches de la déclaration des astuces la non-imbriquées-ternaire eslint la règle, ce qui est assez soigné (bien que je ne recommande pas de le faire à moins qu'il n'y a pas d'autre moyen de sortir).Une démonstration rapide:
J'ai effectivement triché un peu en choisissant un exemple où
b
est toujours truthy, mais si vous êtes juste de réglage des chaînes ensuite, cela devrait bien fonctionner en tant que même'0'
est ironiquement truthy.OriginalL'auteur Ambyjkl
J'ai été en utilisant un commutateur(vrai) déclaration de ces cas. À mon avis, cette syntaxe se sent un peu plus élégante que imbriquée si/d'autre opérateurs
OriginalL'auteur ap-o