2012-09-27 25 views
146

Mam tablicę napisów i jeden ciąg znaków. Chciałbym przetestować ten ciąg na wartościach tablicowych i zastosować warunek wynikowy - jeśli tablica zawiera ciąg znaków "A", w innym przypadku "B".Jak sprawdzić, czy tablica znaków zawiera jeden ciąg w JavaScript?

Jak mogę to zrobić?

+1

Sprawdź: http://stackoverflow.com/questions/237104/array -containsobj-in-javascript –

+1

indexOf [Dokumentacja MDN] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf) – epascarello

+0

iteruj po tablicy i porównuj jeden po drugim! – SachinGutte

Odpowiedz

277

Jest indexOf sposób, że wszystkie matryce ma (oprócz Internet Explorer 8 poniżej), która zwraca wskaźnik elementu w szyku lub -1, jeśli nie ma w tablicy:

if (yourArray.indexOf("someString") > -1) { 
    //In the array! 
} else { 
    //Not in the array 
} 

Jeśli potrzebujesz obsługi starych przeglądarek IE, możesz polyfilować tę metodę za pomocą kodu w the MDN article.

4

to zrobi to za ciebie:

function inArray(needle, haystack) { 
    var length = haystack.length; 
    for(var i = 0; i < length; i++) { 
     if(haystack[i] == needle) 
      return true; 
    } 
    return false; 
} 

Znalazłem go w przepełnienie stosu pytanie JavaScript equivalent of PHP's in_array().

+3

I odświeżyłeś indexOf obsługiwany przez nowoczesne przeglądarki. – epascarello

+7

... który nie jest wspierany przez IE przed IE9 - wiele osób, łącznie z mną, musi się rozwijać dla IE8 (i niestety IE7 też przez większość czasu). Wprawdzie prototypowa metoda tworzenia funkcji indexOf jest lepszym rozwiązaniem niż to, co napisałem: – ollie

15
var stringArray = ["String1", "String2", "String3"]; 

return (stringArray.indexOf(searchStr) > -1) 
40

Można użyć metody indexOf i "przedłużyć" klasy Array metodą contains jak ten:

Array.prototype.contains = function(element){ 
    return this.indexOf(element) > -1; 
}; 

z następującymi wynikami:

["A", "B", "C"].contains("A") równa true

["A", "B", "C"].contains("D") jest równy false

+0

Dobra odpowiedź, ale warto wspomnieć o problemach ze zgodnością dla starych wersji IE przy użyciu indexOf. –

+11

nikt nie dba o to, nawet microsoft: D – andygoestohollywood

+0

@andygoestohollywood Niestety niektóre firmy nadal używają IE. To, że niektóre firmy są w epoce kamienia łupanego, nie oznacza, że ​​powinieneś zrzucić 9% rynku. –

8

Utwórz ten prototyp funkcji:

Array.prototype.contains = function (needle) { 
    for (i in this) { 
     if (this[i] == needle) return true; 
    } 
    return false; 
} 

a następnie można użyć poniższy kod, aby szukać w tablicy x

if (x.contains('searchedString')) { 
    // do a 
} 
else 
{ 
     // do b 
} 
+1

Przeczytaj [Dlaczego używasz "dla ... w" z iteracją tablicową taki zły pomysł?] (Https://stackoverflow.com/questions/500504/why-is-using- for-in-with-array-iteration-like-a-bad-idea) – Bergi

Powiązane problemy