Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

512
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda