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


Cette question a déjà une réponse ici:

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

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

424
2018-05-24 20:31


origine


Réponses:


Vous n'avez vraiment pas besoin de jQuery pour cela.

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

ou

function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

Il convient de noter que array.indexOf(..) est non pris en charge dans IE <9, mais jQuery indexOf(...) La fonction fonctionnera même pour les anciennes versions.


720
2018-03-07 16:50



Offres jQuery $.inArray:

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>


Modifier 3.5 ans plus tard

$.inArray est effectivement un emballage pour Array.prototype.indexOf dans les navigateurs qui le soutiennent (presque tous ces jours-ci), tout en fournissant une cale dans ceux qui ne le font pas. Cela équivaut essentiellement à ajouter une cale Array.prototype, qui est une manière plus idiomatique / JSish de faire les choses. MDN fournit un tel code. Ces jours-ci, je prendrais 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


Modifier un autre 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 confusion -1 résultats. Il fait ce que l'on veut: ça revient true ou false. Pour les navigateurs plus anciens, il est polyfillable en utilisant le code à 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


529
2018-05-24 20:34



Voici:

$.inArray('specialword', arr)

Cette fonction renvoie 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 voulez probablement l'utiliser comme ça:

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

27
2018-05-24 20:33



Vous pouvez utiliser un for boucle:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}

14
2018-05-24 20:35



Je n'aime pas $.inArray(..)C'est le genre de solution laide et jalouse que les gens les plus sains ne toléreraient pas. Voici un extrait qui ajoute un simple contains(str) méthode à 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 pourriez envelopper $.inArray dans une extension:

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}

4
2017-12-31 05:14