Este escrito fue evaluado por expertos para asegurar la exactitud de este post.
Solución:
Sus alternativas aquí son básicamente:
- Que
if
/else
no quieres hacer - A
switch
combinado conif
/else
Traté de encontrar una opción de mapa de búsqueda razonable, pero se volvió irrazonable con bastante rapidez.
Iría por el número 1, no es tan grande:
if (res.distance == 0)
word = 'a';
else if (res.distance == 1 && res.difference > 3)
word = 'b';
else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5)
word = 'c';
else
word = 'd';
Si le molestan todas las llaves y el tamaño vertical, sin ellos es casi tan conciso como la versión del operador condicional:
if (res.distance == 0) word = 'a';
else if (res.distance == 1 && res.difference > 3) word = 'b';
else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5) word = 'c';
else word = 'd';
(No estoy abogando por eso, nunca abogo por dejar las llaves o poner la declaración después de una if
en la misma línea, pero otros tienen diferentes perspectivas de estilo.)
El n. ° 2 es, en mi opinión, más torpe, pero probablemente sea más un comentario de estilo que otra cosa:
word = 'd';
switch (res.distance)
case 0:
word = 'a';
break;
case 1:
if (res.difference > 3)
word = 'b';
break;
case 2:
if (res.difference > 5 && String(res.key).length > 5)
word = 'c';
break;
Y finalmente, y yo soy no defendiendo esto, puede aprovechar el hecho de que JavaScript switch
es inusual en la familia de lenguajes de sintaxis B: el case
las declaraciones pueden ser expresionesy se comparan con el valor del interruptor en el orden del código fuente:
switch (true)
case res.distance == 0:
word = 'a';
break;
case res.distance == 1 && res.difference > 3:
word = 'b';
break;
case res.distance == 2 && res.difference > 5 && String(res.key).length > 5:
word = 'c';
break;
default:
word = 'd';
break;
¿Qué tan feo es eso? 🙂
A mi gusto, un ternario anidado cuidadosamente estructurado supera todos esos complicados cambios y condicionantes:
const isFoo = res.distance === 0;
const isBar = res.distance === 1 && res.difference > 3;
const isBaz = res.distance === 2 && res.difference > 5 && String(res.key).length > 5;
const word =
isFoo ? 'a' :
isBar ? 'b' :
isBaz ? 'c' :
'd' ;
Podría escribir una expresión de función invocada inmediatamente para que sea un poco más legible:
const word = (() =>
if (res.distance === 0) return 'a';
if (res.distance === 1 && res.difference > 3) return 'b';
if (res.distance === 2 && res.difference > 5 && String(res.key).length > 5) return 'c';
return 'd';
)();
Enlace para replicar
Agradecemos que quieras añadir valor a nuestro contenido informacional colaborando tu veteranía en las críticas.