2012-10-08 18 views
17

Duplicar posible:
array.contains(obj) in JavaScript¿cómo puedo comparar una cadena con varios valores?

Algo así como:

if (mystring == "a" || mystring == "b" || mystring =="c") 

que estaba animado a hacer:

if (mystring in ("a", "b", "c")) 

es posible?

+3

Su ejemplo está mal, está asignando y no la comparación. – epascarello

+0

cierto, era un error tipográfico. gracias – Diego

+0

No estoy hablando de matrices @ DanielA.White, sé que puedo agregar las cadenas a una, pero creo que hay maneras de hacerlo sin – Diego

Respuesta

18

Usted podría utilizar indexOf() como esto

if ([ 'a', 'b', 'c' ].indexOf(mystring) > -1) { ... } 

EDITAR Con ES7 viene un poco de simplificación. A partir de hoy solo en Chrome 47+ 43+ y FF parecen apoyarla:

if ([ 'a', 'b', 'c' ].includes(mystring)) { ... } 
+0

gracias, parece ser la manera más simple. – Diego

+0

¡Gracias! Señor Srko –

1

Usted puede utilizar indexOf

[1,2,3].indexOf(1) will give 0 
[1,2,3].indexOf(4) will give -1 

Por lo tanto, se puede comprobar si indexOf devuelve -1.

Similar para cadenas.

0

Algo así como

foreach (str in strings) { 
    if (mystring.contains(str)) { 
     ... 
    } 
} 

puede trabajar.

+0

contiene? No es una función –

5

Usando indexOf es lo primero que viene a la mente, sin embargo hay que tener en cuenta, que no hay .indexOf función en IEs de más edad (por lo que tendría que utilizar el código personalizado para simularlo, o simplemente ir directamente a algo como jQuery.inArray o underscore.js indexOf).

if ([ 'a', 'b', 'c' ].indexOf(mystring) > -1) { ... } 

Nota al margen: como se puede ver mirando InArray definición en la fuente de jQuery, la escritura de su propio reemplazo indexOf es bastante fácil. Así que como dije, escribe tu propio método, copia y pega de otras bibliotecas o simplemente usa esas librerías si quieres poder usar indexOf en cada navegador.

+0

gracias +1 por el IE heads up – Diego

0

Su versión es la más rápida para tres caracteres y la más legible.

con un poco más valores posibles, se puede usar algo como esto:

var c; 
if (s.length==1 && (c=s.charAt(0))>='a' && c<='c') { 

Pero eso es sobre todo para la diversión ...

1

creo que algo como esto:

if (["a", "b", "c"].indexOf(mystring) != -1) { 
    // do something 
} 
1
if (["a", "b", "c"].indexOf(mystring) != -1) {} 

Esta sería la mejor manera, sin embargo puede que no funcione en algunos navegadores.

0

Addtionally: se podría crear una extensión de la cadena por la comparación:

String.prototype.in = function(){ 
    return ~[].slice.call(arguments).indexOf(this.valueOf()) ? true : false; 
} 
//usage 
var myStr = 'a'; 
myStr.in('a','b','c'); //=> true 
'd'.in('a','b','c'); //=> false 

Para los navegadores antiguos: este MDN page contiene una cuña para Array.indexOf

Cuestiones relacionadas