Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

510
Vistas
Cómo escribir una expresión de operador ternario (también conocido como si) sin repetirse

Por ejemplo, algo como esto:

 var value = someArray.indexOf(3) !== -1 ? someArray.indexOf(3) : 0

¿Hay una mejor manera de escribir eso? Nuevamente, no estoy buscando una respuesta a la pregunta anterior exacta, solo un ejemplo de cuándo podría tener operandos repetidos en expresiones de operadores ternarios ...

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Personalmente, creo que la mejor manera de hacer esto sigue siendo la buena declaración if :

 var value = someArray.indexOf(3); if (value === -1) { value = 0; }
over 4 years ago · Santiago Trujillo Denunciar

0

El código debe ser legible, por lo que ser breve no debe significar ser conciso sin importar el costo, para eso debe volver a publicar en https://codegolf.stackexchange.com/ , por lo que recomendaría usar una segunda variable local llamada index para maximizar la comprensión de lectura (con un costo mínimo de tiempo de ejecución también, observo):

 var index = someArray.indexOf( 3 ); var value = index == -1 ? 0 : index;

Pero si realmente quieres reducir esta expresión, porque eres un sádico cruel con tus compañeros de trabajo o colaboradores del proyecto, aquí hay 4 enfoques que podrías usar:

1: variable temporal en una instrucción var

Puede usar la capacidad de la instrucción var para definir (y asignar) un segundo index variable temporal cuando se separa con comas:

 var index = someArray.indexOf(3), value = index !== -1 ? index: 0;

2: función anónima autoejecutable

Otra opción es una función anónima autoejecutable:

 // Traditional syntax: var value = function( x ) { return x !== -1 ? x : 0 }( someArray.indexOf(3) ); // ES6 syntax: var value = ( x => x !== -1 ? x : 0 )( someArray.indexOf(3) );

3: operador de coma

También existe el infame "operador de coma" compatible con JavaScript, que también está presente en C y C++.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

Puede usar el operador de coma cuando desee incluir varias expresiones en una ubicación que requiera una sola expresión.

Puede usarlo para introducir efectos secundarios, en este caso reasignándolo a value :

 var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );

Esto funciona porque el var value se interpreta primero (ya que es una declaración), y luego la asignación de value más a la izquierda, más interna, y luego la mano derecha del operador de coma, y luego el operador ternario - todo JavaScript legal.

4: Reasignar en una subexpresión

El comentarista @IllusiveBrian señaló que el uso del operador coma (en el ejemplo anterior) no es necesario si la asignación al value se usa como una subexpresión entre paréntesis:

 var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );

Tenga en cuenta que el uso de negativos en expresiones lógicas puede ser más difícil de seguir para los humanos, por lo que todos los ejemplos anteriores se pueden simplificar para leer cambiando idx !== -1 ? x : y a idx == -1 ? y : x :

 var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
over 4 years ago · Santiago Trujillo Denunciar

0

para numeros

Puede usar la función Math.max() .

 var value = Math.max( someArray.indexOf('y'), 0 );

Mantendrá los límites del resultado desde 0 hasta el primer resultado mayor que 0 si ese es el caso. Y si el resultado de indexOf es -1 , devolverá 0 si es mayor que -1 .

Para valores booleanos y booleanos-y

Para JS no existe una regla general AFAIK, especialmente porque se evalúan los valores falsos.

Pero si algo te puede ayudar la mayoría de las veces es el operador or ( || ):

 // Instead of var variable = this_one === true ? this_one : or_this_one; // you can use var variable = this_one || or_this_one;

Tienes que tener mucho cuidado con esto, porque en tu primer ejemplo, indexOf puede devolver 0 y si evalúas 0 || -1 devolverá -1 porque 0 es un valor falso .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda