Jak sprawdzić, czy tablica zawiera określony ciąg znaków w JavaScript/jQuery?

Czy ktoś może mi powiedzieć, jak wykryć, czy "specialword" pojawia się w tablicy? Przykład:

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

jQuery oferuje $.inArray:

Zauważ, że inArray zwraca indeks znalezionego elementu, więc 0 wskazuje, że element jest pierwszym w tablicy. -1 wskazuje, że element nie został znaleziony.

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>

Edycja 3,5 roku później.

$.inArray jest efektywnie wrapperem dla Array.prototype.indexOf w przeglądarkach, które to wspierają (prawie wszystkie z nich w dzisiejszych czasach), jednocześnie zapewniając shim w tych, które tego nie robią. Jest to w zasadzie równoważne dodaniu podkładki do Array.prototype, co jest bardziej idiomatycznym/JSish sposobem robienia rzeczy. MDN dostarcza taki kod. W dzisiejszych czasach skorzystałbym z tej opcji, zamiast używać wrappera 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

Edytuj kolejne 3 lata później

Ojej, 6,5 roku?!

Najlepszą opcją dla tego w nowoczesnym Javascript jest Array.prototype.includes:

var found = categories.includes('specialword');

Nie ma porównań i nie ma mylących wyników -1. Robi to, co chcemy: zwraca true lub false. Dla starszych przeglądarek jest to'polifillable używając kodu na 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
Komentarze (22)

Proszę bardzo:

$.inArray('specialword', arr)

Funkcja zwraca dodatnią liczbę całkowitą (indeks tablicy podanej wartości), lub -1 jeżeli podana wartość nie została znaleziona w tablicy.

Live demo: http://jsfiddle.net/simevidas/5Gdfc/

Prawdopodobnie będziesz chciał użyć tego w ten sposób:

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

Możesz użyć pętli for:

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