Saltar al contenido

Alternativa al operador ternario anidado en JS

Este escrito fue evaluado por expertos para asegurar la exactitud de este post.

Solución:

Sus alternativas aquí son básicamente:

  1. Que if/else no quieres hacer
  2. A switch combinado con if/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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *