La primera vez que trabajo jQuery.inArray()
y actúa un poco extraño.
Si el objeto está en la matriz, devolverá 0, pero 0 es falso en Javascript. Entonces se mostrará lo siguiente: "NO está en la matriz"
var myarray = [];
myarray.push("test");
if(jQuery.inArray("test", myarray)) {
console.log("is in array");
} else {
console.log("is NOT in array");
}
Tendré que cambiar la declaración if a:
if(jQuery.inArray("test", myarray)==0)
Pero esto hace que el código sea ilegible. Especialmente para alguien que no conoce esta función. Esperarán que jQuery.inArray ("prueba", myarray) sea verdadero cuando "prueba" esté en la matriz.
Entonces mi pregunta es, ¿por qué se hace de esta manera? Realmente no me gusta esto. Pero debe haber una buena razón para hacerlo así.
fuente
if jQuery.inArray('test', myarray) isn't -1
$.isInArray = function(test,array) { return $.inArray(test, array) !== -1; };
$.isInArray = function(item, array) { return !!~$.inArray(item, array); };
(mantendría un código críptico como ese en una función bien nombrada para mantener clara la intención :))if( $.inArray(test, array) > -1) { // do stuff }
$.inArray
devuelve el índice del elemento si se encuentra o -1 si no lo es, no es un valor booleano. Entonces lo correcto esfuente
La respuesta proviene del primer párrafo de la verificación de documentación si los resultados son mayores que -1, no si es verdadero o falso.
fuente
La forma correcta de usar
inArray(x, arr)
es no usarlo en absoluto , y usarlo en su lugararr.indexOf(x)
.El nombre estándar oficial también es más claro sobre el hecho de que el valor devuelto es un índice, por lo tanto, si el elemento pasado es el primero, obtendrá un
0
(eso es falso en Javascript).(Tenga en cuenta que no
arr.indexOf(x)
es compatible con Internet Explorer hasta IE9 , por lo que si necesita admitir IE8 y versiones anteriores, esto no funcionará y la función jQuery es una mejor alternativa).fuente
$.inArray
uso al principio de algún código tengo que ir a arreglar un error, gimo. De todos modos, esta debería ser la respuesta aceptada.O si desea obtener un poco de fantasía, puede usar los operadores bit a bit no (~) y lógico no (!) Para convertir el resultado de la función inArray en un valor booleano.
fuente
Yo suelo usar
o
fuente
if( $.inArray("test", myarray) > -1 )
El método jQuery inArray () se utiliza para buscar un valor en una matriz y devolver su índice, no un valor booleano. Y si no se encontró el valor, devolverá -1.
Entonces, para verificar si un valor está presente en una matriz, siga la práctica a continuación:
Referencia
fuente
La
inArray
función devuelve el índice del objeto suministrado como el primer argumento a la función en la matriz suministrada como el segundo argumento a la función.Cuando
inArray
regresa0
, indica que el primer argumento se encontró en la primera posición de la matriz suministrada.Para usar
inArray
dentro de una declaración if, use:inArray
regresa-1
cuando el primer argumento pasado a la función no se encuentra en la matriz pasada como el segundo argumento.fuente
en lugar de usar
jQuery.inArray()
, también puede usar elincludes
método para la matriz int:revisa la publicación oficial aquí
fuente
jQuery.inArray () devuelve el índice del elemento en la matriz, o -1 si no se encontró el elemento. Lea más aquí: jQuery.inArray ()
fuente
Devolverá el índice del elemento en la matriz. Si no se encuentra, obtendrá
-1
fuente
Si queremos comprobar que un elemento está dentro de un conjunto de elementos, podemos hacer, por ejemplo:
fuente
Esto es útil para verificar variables dinámicas. Este método es fácil de leer.
fuente
$.inArray()
hace EXACTAMENTE LA MISMA COSA quemyarray.indexOf()
y devuelve el índice del elemento sobre el que está comprobando la existencia de la matriz. Es simplemente compatible con versiones anteriores de IE antes de IE9. Probablemente, la mejor opción es usar elmyarray.includes()
que devuelve un valor booleano verdadero / falso. Consulte el fragmento a continuación para ver ejemplos de salida de los 3 métodos.fuente
$.inArray
debería ser el estándar de oro si tiene acceso a la biblioteca jQuery. De lo contrario, se.indexOf
debe utilizar JavaScript con un polyfill para IE8. Manténgase alejado de esas cosas modernas como.includes()
.Hombre, mira el documento .
por ejemplo:
fuente
Por alguna razón, cuando intentas buscar un elemento DOM jquery, no funcionará correctamente. Así que reescribir la función haría el truco:
fuente
fuente
Simplemente nadie usa en
$
lugar dejQuery
:fuente
$
lugar dejQuery
.