web-dev-qa-db-fra.com

Comment savoir si un tableau contient une chaîne spécifique dans JavaScript / jQuery?

Quelqu'un peut-il me dire comment détecter si "specialword" apparaît dans un tableau? Exemple:

categories: [
    "specialword"
    "Word1"
    "Word2"
]
548
Cofey

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.

885
James

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_
590
lonesomeday

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
}
31
Šime Vidas

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;
  }
}
14
JaredPar

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);
}
4
Adam Eberlin