2012-09-27 18 views
146

Tengo una matriz de cadenas y una cadena. Me gustaría probar esta cadena contra los valores de la matriz y aplicar una condición al resultado: si la matriz contiene la secuencia, haz "A", sino haz "B".¿Cómo comprobar si una matriz de cadenas contiene una cadena en JavaScript?

¿Cómo puedo hacer eso?

+1

Compruébelo usted mismo: http://stackoverflow.com/questions/237104/array -containsobj-in-javascript –

+1

indexOf [MDN Docs] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf) – epascarello

+0

¡itere a través de la matriz y compare uno por uno! – SachinGutte

Respuesta

277

Existe un método indexOf que todas las matrices tienen (excepto Internet Explorer 8 y abajo) que devolverá el índice de un elemento de la matriz, o -1 si no es en la matriz:

if (yourArray.indexOf("someString") > -1) { 
    //In the array! 
} else { 
    //Not in the array 
} 

Si necesita admitir navegadores IE antiguos, puede rellenar este método utilizando el código en the MDN article.

4

Esto lo hará por usted:

function inArray(needle, haystack) { 
    var length = haystack.length; 
    for(var i = 0; i < length; i++) { 
     if(haystack[i] == needle) 
      return true; 
    } 
    return false; 
} 

lo encontré en desbordamiento de pila pregunta JavaScript equivalent of PHP's in_array().

+3

Y reinventó indexOf compatible con los navegadores de hoy en día. – epascarello

+7

... que no es compatible con IE antes de IE9 - muchas personas, yo incluido, tenemos que desarrollar para IE8 (y tristemente IE7 también la mayoría de las veces). Es cierto que el método prototipo que crea la función indexOf es una solución preferible a lo que publiqué – ollie

15
var stringArray = ["String1", "String2", "String3"]; 

return (stringArray.indexOf(searchStr) > -1) 
40

Usted puede utilizar el método indexOf y "extender" la clase Array con el método contains así:

Array.prototype.contains = function(element){ 
    return this.indexOf(element) > -1; 
}; 

con los siguientes resultados:

["A", "B", "C"].contains("A") es igual a true

["A", "B", "C"].contains("D") es igual a false

+0

. Buena respuesta, pero vale la pena mencionar las preocupaciones de compatibilidad con versiones anteriores de IE al usar indexOf. –

+11

a nadie le importa, es decir, incluso Microsoft: D – andygoestohollywood

+0

@andygoestohollywood Lamentablemente, algunas empresas todavía usan IE. El hecho de que algunas empresas estén en la edad de piedra no significa que deba deshacerse del 9% de su mercado. –

8

Crear esta función prototipo:

Array.prototype.contains = function (needle) { 
    for (i in this) { 
     if (this[i] == needle) return true; 
    } 
    return false; 
} 

y entonces puede utilizar el código siguiente para buscar en la matriz x

if (x.contains('searchedString')) { 
    // do a 
} 
else 
{ 
     // do b 
} 
+1

Lee [¿Por qué usar "para ... en" con iteración de matriz es una mala idea?] (Https://stackoverflow.com/questions/500504/why-is-using- for-in-with-array-iteration-such-a-bad-idea) – Bergi

Cuestiones relacionadas