jQuery.inArray(), comment l'utiliser?
Première fois que je travaille avec jQuery.inArray()
et il agit un peu étrange.
Si l'objet est dans le tableau, il sera de retour 0, mais 0 est faux dans le Javascript. Donc la suite sera de sortie: "n'est PAS dans la gamme"
var myarray = [];
myarray.push("test");
if(jQuery.inArray("test", myarray)) {
console.log("is in array");
} else {
console.log("is NOT in array");
}
Je vais avoir à modifier l'instruction if:
if(jQuery.inArray("test", myarray)==0)
Mais cela rend le code illisible. Surtout pour quelqu'un qui ne connait pas cette fonction. Ils s'attendent à ce que jQuery.inArray("test", myarray) donne vrai quand le "test" est dans le tableau.
Donc ma question est, pourquoi est-il fait de cette façon? J'ai vraiment n'aime pas cette. Mais il doit y avoir une bonne raison de le faire comme ça.
Vous devez vous connecter pour publier un commentaire.
inArray
renvoie l'index de l'élément dans le tableau, pas un booléen indiquant si l'élément existe dans le tableau. Si l'élément n'a pas été trouvé,-1
sera retourné.Donc, pour vérifier si un élément est dans le tableau, utilisez:
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); };
(je voudrais garder le code obscur comme ça dans une fonction nommée à garder l'intention claire 🙂 )if jQuery.inArray('test', myarray) isnt -1
!==
, seulement!=
est suffisant, n'est-ce pas?if( $.inArray(test, array) > -1) { // do stuff }
if(jQuery.inArray("test", myarray) != -1)
tout - ( négatif ) doit être placé à droite ! Pourquoi tout le monde à l'aide de -1 ?. comme @MistyDawn l'a dit il!!$.inArray
renvoie la indice de l'élément s'il est trouvé ou -1 si elle ne l'est pas, pas une valeur booléenne. Donc la bonne estLa réponse est dans le premier paragraphe de la documentation de vérifier si le résultat est supérieur à -1, pas si c'est vrai ou faux.
La bonne façon d'utiliser
inArray(x, arr)
est ne l'utilisez pas à tous les, et d'utiliser au lieuarr.indexOf(x)
.La norme officielle nom est aussi plus claire sur le fait que la valeur retournée est un index ainsi, si l'élément passé est le premier que vous obtiendrez une
0
(c'est-à falsy en Javascript).(Notez que
arr.indexOf(x)
est pas pris en charge dans Internet Explorer jusqu'à ce que IE9, donc si vous avez besoin de soutien IE8 et plus tôt, cela ne fonctionnera pas, et la fonction jQuery est une meilleure alternative.)$.inArray
utilisé au début du code que je dois aller correction d'un bug dans, je râle. De toute façon, ce doit être la accepté de répondre.Ou si vous voulez obtenir un peu de fantaisie, vous pouvez utiliser le not au niveau du bit (~) et non logique(!) les opérateurs de convertir le résultat de la inArray fonction à valeur booléenne.
J'ai l'habitude d'utiliser
ou
if( $.inArray("test", myarray) > -1 )
jQuery inArray() la méthode est utilisée pour chercher une valeur dans un tableau et retourne son index non une valeur Booléenne. Et si la valeur n'a pas été trouvé, il va renvoyer -1.
Donc, pour vérifier si une valeur est présente dans un tableau, suivez les dessous de pratique:
Référence
La
inArray
fonction retourne l'index de l'objet de la livraison comme premier argument de la fonction dans le tableau fourni en tant que deuxième argument de la fonction.Quand
inArray
retourne0
il indique que le premier argument a été trouvé à la première position de la matrice.À utiliser
inArray
dans une instruction if utilisation:inArray
retourne-1
lorsque le premier argument passé à la fonction n'est pas trouvé dans le tableau passé en second argument.au lieu d'utiliser
jQuery.inArray()
vous pouvez également utiliserincludes
méthode de tableau int :vérifier post officiel ici
jQuery.inArray() renvoie l'index de l'élément dans le tableau, ou -1 si l'élément n'a pas été trouvé. Lire la suite ici: jQuery.inArray()
Il renvoie l'index de l'élément dans le tableau. Si il ne l'est pas, vous obtiendrez
-1
Si nous voulons vérifier un élément est à l'intérieur d'un ensemble d'éléments que nous pouvons faire par exemple:
Ce qui est utile pour vérifier les variables dynamiques. Cette méthode est facile à lire.
$.inArray()
ne le exactement la MÊME CHOSE commemyarray.indexOf()
et renvoie l'index de l'élément à vérifier le tableau de l'existence d'. C'est juste compatible avec les anciennes versions d'IE avant d'IE9. Le meilleur choix est probablement d'utilisermyarray.includes()
qui retourne un booléen (true/false valeur. Voir l'extrait de code ci-dessous pour des exemples de sortie de tous les 3 méthodes.JS:
CSS:
HTML:
$.inArray
devrait être la norme d'or si vous avez accès à la bibliothèque jQuery. Sinon, JavaScript.indexOf
avec un polyfill pour IE8 devrait être utilisé à la place. Rester à l'écart de moderne, que des trucs comme.includes()
.Homme, cochez la doc.
par exemple:
Pour quelque raison que lorsque vous essayez de vérifier pour un jquery élément du DOM, il ne fonctionnera pas correctement. Donc réécrire la fonction serait de faire le tour:
Pas seulement celui que l'utilisation
$
au lieu dejQuery
:$
au lieu dejQuery
.