2012-09-27 15 views
146

Ich habe ein String-Array und eine Zeichenfolge. Ich möchte diese Zeichenfolge gegen die Array-Werte testen und eine Bedingung das Ergebnis anwenden - wenn das Array die Zeichenfolge "A" enthält, sonst "B".Wie überprüft man, ob ein String-Array eine Zeichenfolge in JavaScript enthält?

Wie kann ich das tun?

+1

Check it out: http://stackoverflow.com/questions/237104/array -conteinsobj-in-javascript –

+1

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

+0

iterieren durch Array und vergleichen Sie eins nach dem anderen! – SachinGutte

Antwort

277

Es gibt eine indexOf Methode, die alle Arrays (außer Internet Explorer 8 und unten), die den Index eines Elements in dem Array zurück, oder -1, wenn es nicht im Array:

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

Wenn Sie alte IE-Browser unterstützen müssen, können Sie diese Methode mit dem Code in the MDN article auffüllen.

4

Dies wird es für Sie tun:

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

ich es in Stack-Überlauf Frage JavaScript equivalent of PHP's in_array() gefunden.

+3

Und Sie neu erfunden indexOf von modernen Browsern unterstützt. – epascarello

+7

... das wird nicht von IE vor IE9 unterstützt - viele Leute, mich eingeschlossen, müssen für IE8 (und leider IE7 auch die meiste Zeit) entwickeln. Zugegebenermaßen ist die Prototyp-Methode, die die indexOf-Funktion erzeugt, eine vorzuziehende Lösung zu dem, was ich gepostet habe. – ollie

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

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

Sie können die indexOf Methode verwenden, und die Array-Klasse mit der Methode contains wie diese "verlängern":

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

mit den folgenden Ergebnissen:

["A", "B", "C"].contains("A") gleich true

["A", "B", "C"].contains("D") entspricht false

+0

Gute Antwort, aber es ist erwähnenswert Kompatibilitätsprobleme für alte IE-Versionen bei Verwendung von indexOf. –

+11

kümmert sich niemand um ie, sogar Microsoft: D – andygoestohollywood

+0

@andygoestohollywood Leider verwenden einige Firmen noch IE. Nur weil einige Unternehmen in der Steinzeit sind, bedeutet das nicht, dass Sie 9% Ihres Marktes wegwerfen sollten. –

8

Erstellen Sie diese Funktion Prototyp:

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

und dann können Sie folgenden Code in Array suchen verwenden x

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

Lesen [Warum ist "für ... in" mit Array-Iteration eine so schlechte Idee?] (Https://stackoverflow.com/questions/500504/why-is-using- for-in-with-array-iteration-wie-eine-schlechte-Idee) – Bergi

Verwandte Themen