Powiedzmy, że mam to:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
Jest więcej elementów tablicy, ale to tylko kilka ze względu na czytelność. Tak czy inaczej, mógłbym zrobić pętlę „for”, ale wykonałoby to 500 pętli za każdym razem, gdy klikniesz mapę ... czy istnieje inny sposób sprawdzenia, czy określony ciąg znajduje się w tablicy?
javascript
test
źródło
źródło
if(!!~blockedTile.indexOf('118))
ta metoda zawsze zwróci true, jeśli wynik> -1 i false, jeśli wynik === -1indexOf()
można również zastosować do tablic dosłownych, npif (-1 == [84, 116].indexOf(event.keyCode))
. Przetestowano w przeglądarce Chrome 37.0.2062.122.indexOf(…) >= 0
. nie robi różnicy i zapominam, skądJak wspomniano wcześniej, jeśli Twoja przeglądarka obsługuje
indexOf()
, świetnie! Jeśli nie, musisz go pollyfil lub polegać na pasku narzędziowym, takim jak lodash / underscore .Chciałem tylko dodać ten nowszy dodatek ES2016 (aby zaktualizować to pytanie):
Array.prototype.includes ()
źródło
źródło
Użyj Underscore.js
Jest zgodny z różnymi przeglądarkami i może przeprowadzać wyszukiwanie binarne, jeśli dane są posortowane.
_.indeks
Przykład
źródło
Niektóre przeglądarki obsługują
Array.indexOf()
.Jeśli nie, możesz ulepszyć
Array
obiekt za pomocą jego prototypu w ten sposób ...Źródło .
źródło
Po prostu użyj według własnego gustu:
źródło
źródło
Najlepszym sposobem na to w 2019 roku jest użycie
.includes()
Pierwszy parametr to to, czego szukasz. Drugi parametr to pozycja indeksu w tej tablicy, od której należy rozpocząć wyszukiwanie.
Jeśli musisz być tutaj crossbrowsy - istnieje wiele starszych odpowiedzi.
źródło
includes
Rozwiązanie jest powielany w Kutyel (2016), Сергей Савельев (2017) i Krunal Limbad (2018) odpowiedzi z równie szczegółowe przykłady i odniesienia ...Odpowiedziałem już powyżej, ale chciałem się podzielić.
Mam tutaj odniesienie . mają również Polyfill powyżej.
źródło
Array.includes()
jest wprowadzona w ES7 (ECMAScript 2017) i nie będzie działać ze starymi przeglądarkami. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ...W zależności od dostępnej wersji JavaScript możesz użyć
indexOf
:Lub
some
:Ale jeśli robisz tego rodzaju istnienie, sprawdzaj dużo, lepiej byłoby użyć Object do przechowywania twoich ciągów (lub być może obiektu, a także tablicy, w zależności od tego, co robisz ze swoimi danymi).
źródło
Użyłbym innej struktury danych, ponieważ tablica wydaje się nie być najlepszym rozwiązaniem.
Zamiast tablicy użyj obiektu jako tablicy skrótów, na przykład:
(opublikowane również w jsbin )
Wyjście konsoli:
To proste rozwiązanie. Jeśli bardziej interesuje Cię podejście obiektowe, wyszukaj w Google „js hashtable” .
źródło
IMHO najbardziej kompatybilny ze starszymi przeglądarkami
Zamieniając kopię Array w ciąg CSV, możesz przetestować ciąg w starszych przeglądarkach.
źródło
['Lemon Pie'].inArray('Lemon')
wróciTrue
. Możesz owinąć igłę,,
aby ominąć ją, lub użyć dopasowania wyrażeń regularnych, aby zrobić podobnie, ale łączenie byłoby lepsze przy użyciu czegoś bardziej niejasnego niż,
z podobnych powodów fałszywie dodatnich (|
powiedzmy). To zależy od zbioru danychDlaczego nie używasz Array.filter?
Po prostu skopiuj to do swojego kodu i gotowe:
źródło
w przykładzie tablicy, to samo w php (in_array)
źródło
źródło
includes
. W jaki sposób ta odpowiedź dostarcza dodatkowych wartości w porównaniu z nimi?Możesz wypróbować poniższy kod. Sprawdź http://api.jquery.com/jquery.grep/
sprawdź arr.length, jeśli jest większa niż 0, oznacza, że łańcuch jest obecny, w przeciwnym razie nie jest obecny.
źródło
Myślę, że najprostszy sposób jest taki:
źródło