Jak znaleźć, czy tablica zawiera określony ciąg znaków w JavaScript / jQuery? [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak sprawdzić, czy tablica zawiera wartość w JavaScript? (54 odpowiedzi) Zamknięty 7 lat temu .

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

categories: [
    "specialword"
    "word1"
    "word2"
]
Author: Cofey, 2011-05-24

5 answers

Naprawdę nie potrzebujesz do tego jQuery.

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

Podpowiedź: indexOf Zwraca liczbę, reprezentującą pozycję, w której podana wartość searchvalue występuje po raz pierwszy, lub -1, jeśli nigdy występuje

Lub

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

Warto zauważyć, że array.indexOf(..)jest nie wspierane w IE , ale funkcja jQuery indexOf(...) będzie działać nawet dla tych starszych wersji.

 1029
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-26 11:35:47

JQuery oferuje $.inArray:

Zauważ, że inArray zwraca indeks znalezionego elementu, więc 0 wskazuje, że element jest pierwszy 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>

Edit 3.5 years later

$.inArray jest faktycznie wrapperem dla Array.prototype.indexOf w przeglądarkach, które go obsługują (prawie wszystkie w dzisiejszych czasach), zapewniając jednocześnie shim w tych, które go nie obsługują. jest to zasadniczo odpowiednik dodawanie shim do Array.prototype, co jest bardziej idiomatycznym / JSish sposobem robienia rzeczy. MDN dostarcza taki kod . W dzisiejszych czasach wybrałbym tę opcję, 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

Edit another 3 years later

rany, 6,5 roku?!

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

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

Żadnych porównań i żadnych mylących wyników -1. Robi to, co chcemy: zwraca true lub false. W starszych przeglądarkach można go polyfillować za pomocą kodu 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
 642
Author: lonesomeday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-31 16:25:26

Proszę bardzo:

$.inArray('specialword', arr)

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

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

Prawdopodobnie chcesz użyć tego w ten sposób:

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}
 34
Author: Šime Vidas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 20:39:35

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;
  }
}
 16
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 01:22:45

Nie lubię $.inArray(..), to rodzaj brzydkiego, jQuery-owskiego rozwiązania, którego większość zdrowych ludzi nie tolerowałaby. Oto fragment, który dodaje prostą metodę contains(str) do twojego arsenału:

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

Podobnie można zawinąć $.inArray W rozszerzenie:

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}
 5
Author: Adam Eberlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 05:29:52