2010-05-14 7 views
7

que tienen una matriz JSON que tiene este aspecto:Coincidencia de un valor a valores de la matriz JSON en jQuery

['Monkey','Cheetah','Elephant','Lizard','Spider'] 

que también tienen una entrada de texto. Quiero probar si el valor de la entrada sobre 'desenfoque' también está en la matriz y si es algo.

Conociendo un poco de pitón que hemos probado algo como esto:

var existing_animals = ['Monkey','Cheetah','Elephant','Lizard','Spider'] 
$('input').blur(function() { 
    user_animal = $(this).val() 
    if (user_animal in existing_animals) { 
    alert('Animal already exists!') 
    } 
}); 

Así pues, cómo el novato es mi error?

+0

Disculpe el error tipográfico en el encabezado y en el ejemplo - debería decir 'user_animal in existing_animals' – chrism

+0

El código que ha publicado comprueba la existencia de existing_animals.Monkey (o, de forma equivalente, existing_animals ['Monkey']). La matriz lo almacena como: existing_animals [0] = 'Monkey'; no es asociativo Creo que la solución de Korchev es la mejor (usando $ .inArray), pero también podría hacerla asociativa como sugirió Matt. – RMorrisey

Respuesta

6

El operador in comprueba si una clave está presente en un diccionario (objeto). Sin embargo, ahora funciona para arreglos. El enfoque correcto es utilizar jQuery.inArray:

if ($.inArray(user_animal, existing) > -1) { 
    alert('Animal already exists!') 
} 
+0

Sabía que uso jQuery por una razón, mientras que las otras respuestas pueden ser correctas, esto es bastante simple incluso para mí, gracias – chrism

0

creo que puede encontrar su respuesta en this article.

Dado que el JSON se evalúa como una matriz, debería observar la función indexOf. No estoy seguro de por qué mencionó Python aquí ..

4

in es para comprobar si un objeto incluye el atributo, donde, como usted está utilizando una matriz.

Si desea utilizar su in, puede hacerlo:

var existing_animals = { 
    "Monkey":1, 
    "Cheetah":1 
}; 

etc, entonces todo estará bien utilizando in, sin embargo, sería mejor continuar usando su arsenal, y simplemente bucle sobre ella .

$('input').blur(function() { 
    user_animal = $(this).val() 

    for (var i=0;i<existing_animals.length;i++) { 
    if (existing_animals[i] == user_animal) { 
     alert("Animal exists"); 

     break; 
    }; 
    }; 
}); 

La 5ª edición ECMA introduce un método indexOf para Arrays, por lo que debería ser tan fácil como hacer:

if (existing_animals.indexOf(user_animal) != -1) { 
    alert("Animal exists"); 
}; 

Sin embargo, Internet Explorer no es compatible con este; you can implement it yourself though.

+0

Acabo de usar 'porque' es un concepto que uso cuando escribo python – chrism

+0

Claro, solo estaba dando una idea de cómo funciona 'in' :) – Matt

Cuestiones relacionadas