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

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

categories: [
    "specialword"
    "word1"
    "word2"
]

jQuery propose [$.inArray][1] :

Notez que inArray renvoie l'index de l'élément trouvé, donc 0 indique que l'élément est le premier dans le 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>

Edit 3.5 ans plus tard

$.inArray est effectivement un wrapper pour Array.prototype.indexOf dans les navigateurs qui le supportent (presque tous de nos jours), tout en fournissant un shim dans ceux qui ne le font pas. Cela revient essentiellement à ajouter un shim à Array.prototype, ce qui est une façon plus idiomatique de faire les choses. MDN fournit [un tel code][2]. De nos jours, je choisirais cette option plutôt que d'utiliser le wrapper 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

Editer un autre 3 ans plus tard

Mon dieu, 6,5 ans ?!

La meilleure option pour cela dans le 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 renvoie " vrai " ou " faux ". Pour les navigateurs plus anciens, il est possible d'utiliser le code de MDN [3].

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

[1] : http://api.jquery.com/jQuery.inArray [2] : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#Polyfill [3] : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill

Commentaires (22)

Voilà :

$.inArray('specialword', arr)

Cette fonction retourne un entier positif (l'index du 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 voudrez probablement l'utiliser comme ceci :

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}
Commentaires (0)

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;
  }
}
Commentaires (3)