2011-01-31 22 views
7

¿Hay alguna forma de escribir lo siguiente usando JavaScript o jQuery?Código más corto para este enunciado "si" de JavaScript

if (this.id==="a" || this.id==="b" || this.id==="c" || this.id==="d") 
+5

Aquí hay una página para comparar el rendimiento de varias sugerencias a continuación: http://jsperf.com/set-memberbship –

+0

@ Jason LeBrun tengo a +1 para la buena demostración, pero como [más a menudo-luego-no] siempre, * claridad primero *. Culpo a mi CPU por la lenta publicación de FF ;-) –

Respuesta

5
if (['a','b','c','d'].indexOf(this.id) >= 0) { ... } 

o

if (this.id in {'a':0,'b':0,'c':0,'d':0}) { ... } 
+2

Si 'this.id' es' 'a'', el primer ejemplo no lo sabría. – ClosureCowboy

+0

Vaya, gracias. Editado –

+0

Tanto su amswer de @ limc (d en o) son formas similares y rápidas de escribirlo. Gracias por el enlace de rendimiento que proporcionó. – Hussein

6

¿Qué le parece esto?

if (this.id in { "a":1, "b":1, "c":1, "d":1 }) { 
    ... 
} 

... ¿o esta?

if("abcd".indexOf(this.id) > -1) { 
    ... 
} 

+0

** + 1 ** Sin embargo, probablemente no usaría '1' como el valor ficticio. – ClosureCowboy

+0

@ClosureCowboy: Gracias por el consejo ... También agregué otro ejemplo, aunque en realidad no es tan legible en mi opinión. :) – limc

+0

no combinaría todas las letras como una sola palabra. Esto no funcionará si la variable tiene más de 1 letra, aunque es una buena manera de escribirla. – Hussein

1

Puede probar el siguiente código. Especialmente cuando tienes más de cuatro valores de prueba.

if (/^[abcdef]$/.test(this.id)) { 
    ... 
} 
+1

¿Qué tal si la variable es más de una letra. – Hussein

+0

'if (/^(val1 | val2 | val3) $ /. Test (this.id)) {...}' –

+0

Actualicé el script de prueba para incluir estas dos ideas también. –

2

Una posibilidad es una declaración de cambio.

switch(this.id){case"a":case"b":case"c":case"d": 
    //do something 
} 
+0

que también funciona, pero terminamos repitiendo la palabra caja 4 veces, como en mi ejemplo, repitiendo la palabra this.id 4 veces. – Hussein

+0

@alex: Sí, sí, pero es un poco más corto, así que pensé en tirarlo allí. : o) – user113716

+0

+1 para eso .... – Hussein

0

El hash anónimo en línea (d in o) el rendimiento fue falsificado en el tests as originally written, porque el hash no se inline en la prueba.

Curiosamente, el verdadero caso de hash en línea, en comparación con el caso de hash predefinido, es mucho más lento en Firefox 4, pero 50% más rápido en Chrome 12.

Pero un punto más importante es que d in o pierde el sentido de un hash, que no tiene que iterar para encontrar cosas.

dos líneas, pero aún así es bastante corto, y by far the fastest:

var o = {a:1,b:1,c:1,d:1}; 
if(o[this.id]){...} 
Cuestiones relacionadas