2009-05-20 29 views
10

Necesito una función de JavaScript que puede tomar en una cadena y una matriz, y devolver cierto si esa cadena se encuentra en la matriz ..función javascript InArray

function inArray(str, arr){ 
    ... 
} 

advertencia: no se puede utilizar o no un marco de JavaScript .

Respuesta

7
+0

Interesante. Esta respuesta (.indexOf (.)) Parece funcionar para mi propósito. Como novato, tengo curiosidad por saber por qué un método en el lenguaje hubiera sido menos preferido que una función personalizada. – prototype

+0

Me doy cuenta de que lo anterior es antiguo, pero vale la pena responderlo a los futuros lectores. array.indexOf() es Javascript 1.6. Las versiones anteriores de Javascript, como las que se encuentran en Internet Explorer, no son compatibles, por lo tanto, utilizaríamos un método personalizado/polyfill cuando sea necesario. – n0wak

+0

MDN tiene un polyfill que puede cortar y pegar: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

18

Se podía hacer una función de matriz prototipo de ala:

Array.prototype.hasValue = function(value) { 
    var i; 
    for (i=0; i<this.length; i++) { if (this[i] === value) return true; } 
    return false; 
} 

if (['test'].hasValue('test')) alert('Yay!'); 

Nota el uso de '===' en lugar de '==' podría cambiar que si necesita coincidencia menos específica ... De lo contrario [3] .hasValue ('3') devolverá falso.

+3

Incluyendo el var en el de (...) está lógicamente engañosa , ya que sugiere que el alcance de la var solo está dentro del ciclo for (para programadores multilingües). Sin embargo, el alcance es la función completa. Además, declarar variables en el punto más alto de su alcance generalmente se considera una buena práctica y una excelente manera de evitar conflictos de alcance. – Kato

1

Eche un vistazo a this related question. Aquí está el código de la respuesta más votados.

function contains(a, obj) { 
    var i = a.length; 
    while (i--) { 
    if (a[i] === obj) { 
     return true; 
    } 
    } 
    return false; 
} 
8

¿Alló como esto?

function in_array(needle, haystack) 
{ 
    for(var key in haystack) 
    { 
     if(needle === haystack[key]) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+5

Probablemente no debería haber usado para (key in array). Si alguien ha extendido el objeto Array, también iterará sobre los nuevos métodos/propiedades (no solo los valores de la matriz). – Matthew

+0

-1 Es mejor utilizar Array.prototype.indexOf(), alternativo con una biblioteca como guión bajo, jQurey, etc., y finalmente, si no se desea o no hay una biblioteca disponible, utilice la solución anterior excepto check Object.prototype.hasOwnProperty(). – martin

-1

cuidado:

indexOf() utiliza los datos parciales. si tiene '12', '1'

indexOf ('1') le conseguirá el índice de '12' no '1'

+0

Creo que está equivocado, no puedo votar abajo pero ¿podría apoyar su respuesta? mi jsfiddle [aquí] (http://jsfiddle.net/DDWr6/) demuestra que está equivocado – Andreas

+0

Creo que confundió los índices, el ejemplo anterior le daría un índice de uno que es el índice correcto para '1'. Recuerde siempre que el primer elemento de matriz tiene un índice de cero que es el índice de '12' Eche un vistazo a la réplica exacta de su ejemplo [aquí] (http://jsfiddle.net/DDWr6/) – Andreas