Quelqu'un peut-il me dire comment détecter si "specialword"
apparaît dans un tableau? Exemple:
categories: [
"specialword"
"Word1"
"Word2"
]
Vous n'avez vraiment pas besoin de jQuery pour cela.
var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);
Astuce : indexOf renvoie un nombre représentant la position où la valeur de recherche spécifiée apparaît pour la première fois, ou -1 si elle ne se produit jamais.
ou
function arrayContains(needle, arrhaystack)
{
return (arrhaystack.indexOf(needle) > -1);
}
Il est à noter que array.indexOf(..)
est non pris en charge dans IE <9 , mais la fonction indexOf(...)
de jQuery fonctionnera même pour les versions plus anciennes.
offres jQuery $.inArray
:
Notez que inArray renvoie l'index de l'élément trouvé, donc _0
_ indique que l'élément est le premier du tableau. _-1
_ indique que l'élément n'a pas été trouvé.
_var categoriesPresent = ['Word', 'Word', 'specialword', 'Word'];
var categoriesNotPresent = ['Word', 'Word', 'Word'];
var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;
console.log(foundPresent, foundNotPresent); // true false
_
_<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
_
Éditer 3,5 ans plus tard
_$.inArray
_ est effectivement un wrapper pour _Array.prototype.indexOf
_ dans les navigateurs qui le prennent en charge (presque tous ces jours-ci), tout en fournissant une cale pour ceux qui ne le font pas. Cela revient essentiellement à ajouter une cale à _Array.prototype
_, qui est une manière plus idiomatique/JSish de faire les choses. MDN fournit tel code . Ces jours-ci, je choisirais cette option plutôt que d'utiliser l'encapsuleur jQuery.
_var categoriesPresent = ['Word', 'Word', 'specialword', 'Word'];
var categoriesNotPresent = ['Word', 'Word', 'Word'];
var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;
console.log(foundPresent, foundNotPresent); // true false
_
Éditez encore 3 ans plus tard
Gosh, 6,5 ans?!
La meilleure option pour cela en Javascript moderne est _Array.prototype.includes
_:
_var found = categories.includes('specialword');
_
Pas de comparaisons et pas de résultats confus _-1
_. Il fait ce que nous voulons: il retourne true
ou false
. Pour les navigateurs plus anciens, il est polyfillable en utilisant le code chez MDN .
_var categoriesPresent = ['Word', 'Word', 'specialword', 'Word'];
var categoriesNotPresent = ['Word', 'Word', 'Word'];
var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');
console.log(foundPresent, foundNotPresent); // true false
_
Voici:
$.inArray('specialword', arr)
Cette fonction renvoie un entier positif (l'indice de tableau de la valeur donnée) ou -1
si la valeur donnée n'a pas été trouvée dans le tableau.
Démonstration en direct: http://jsfiddle.net/simevidas/5Gdfc/
Vous voulez probablement utiliser ceci comme ceci:
if ( $.inArray('specialword', arr) > -1 ) {
// the value is in the array
}
Vous pouvez utiliser une boucle for
:
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] === "specialword") {
found = true;
break;
}
}
Je n'aime pas $.inArray(..)
, c'est le genre de solution laide et jQuery-ish que la plupart des gens sensés ne toléreraient pas. Voici un extrait qui ajoute une simple méthode contains(str)
à votre arsenal:
$.fn.contains = function (target) {
var result = null;
$(this).each(function (index, item) {
if (item === target) {
result = item;
}
});
return result ? result : false;
}
De même, vous pouvez envelopper $.inArray
dans une extension:
$.fn.contains = function (target) {
return ($.inArray(target, this) > -1);
}