2010-04-13 11 views

Respuesta

15

Se podría utilizar un conjunto de valores válidos y probarlo con indexOf:

if ([1, 3, 4, 17, 80].indexOf(x) != -1) 

Editar Tenga en cuenta que indexOf acaba de ser agregada en ECMAScript 5 y por lo tanto no es implementado en todos los navegadores. Sin embargo, se puede utilizar el following code añadir que si faltan:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 

O, si ya está utilizando un marco de JavaScript, también puede utilizar la aplicación de ese método.

+0

¡Genial, esto es lo que estaba buscando! Gracias ! –

+0

+1 ... Este es el más adecuado. El operador 'in' no funciona correctamente para las matrices, como sugirió: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/in_Operator –

+0

+1 ¡innovador! feo pero interesante – BritishDeveloper

6
switch (x) { 
    case 1: 
    case 3: 
    case 4: 
    case 17: 
    case 80: 
     //code 
     break; 
    default: 
     //code 
} 
+2

exactamente simple, pero una buena alternativa, y el buen uso de no utilizar un descanso, que por cierto se le olvidó poner después del código en ' caso 80: ' – thecoshman

+0

y necesita la ruptura en el caso predeterminado – BritishDeveloper

+0

He hecho las ediciones que sugirió. ¡Gracias! – Yongho

-1

muchas opciones

if ([0, 1, 3, 4, 17, 80].indexOf(x) > 0) 

if(/^(1|3|4|17|80)$/.test(x)) 

if($.inArray(x, [1, 3, 4, 17, 80]) 

otro, basado en Ed's answer

function list() { 
    for (var i = 0, o = {}; i < arguments.length; i++) 
     o[arguments[i]] = ''; 
    return o; 
} 


if(x in list(1, 3, 4, 17, 80))... 
+1

El índice de matriz de JavaScript comienza con 0. – Gumbo

+0

@Gumbo: ¿en serio? ;/ – user187291

+0

@stereofrog: Sí: '[0, 1, 3, 4, 17, 80] .indexOf (0) === 0'. – Gumbo

0

Usted puede optimizar su propio ejemplo y deshacerse de algunos caracteres, por lo que es más fácil en los ojos ..:

if (x == 1 || x == 3 || x == 4 || x == 17 || x == 80) { ... } 
2

Esta es una pequeña función que encontré en algún lugar en la web:

function oc(a) { 
    var o = {}; 
    for (var i = 0; i < a.length; i++) { 
     o[a[i]] = ''; 
    } 
    return o; 
} 

usados ​​como esto:

if (x in oc(1, 3, 4, 17, 80)) {...} 

lo estoy usando para las cadenas de mí mismo; no he intentado con números, pero supongo que funcionaría.

+0

Actualizado mi respuesta. – Edgar

1

una prueba de expresión regular utiliza el valor de cadena de x:

if(/^[134]|17|80$/.test(x)){/*...*/} 
no
Cuestiones relacionadas