2012-10-08 5 views
17

Mögliche Duplizieren:
array.contains(obj) in JavaScriptWie kann ich eine Zeichenfolge mit mehreren Werten vergleichen?

Etwas wie:

if (mystring == "a" || mystring == "b" || mystring =="c") 

Ich war Hopping zu tun:

if (mystring in ("a", "b", "c")) 

ist es möglich?

+3

Ihr Beispiel ist falsch, Sie zuweisen und nicht zu vergleichen Sie eine String-Erweiterung für den Vergleich schaffen könnten. – epascarello

+0

wahr, es war ein Tippfehler. Danke – Diego

+0

Ich spreche nicht über Arrays @ DanielA.White, ich weiß, ich kann die Strings zu einem hinzufügen, aber ich glaube, es gibt Möglichkeiten, es zu tun, ohne – Diego

Antwort

18

Sie indexOf() wie diese

if ([ 'a', 'b', 'c' ].indexOf(mystring) > -1) { ... } 

EDIT Mit ES7 kommt ein wenig Vereinfachung nutzen könnten. Ab heute nur Chrome 47+ und 43+ FF scheinen sie zu unterstützen:

if ([ 'a', 'b', 'c' ].includes(mystring)) { ... } 
+0

danke, scheint der einfachste Weg zu sein. – Diego

+0

Danke! Herr SiRko –

1

Sie indexOf

[1,2,3].indexOf(1) will give 0 
[1,2,3].indexOf(4) will give -1 

So verwenden können, können Sie überprüfen, ob indexOf gibt -1 zurück.

Ähnlich für Strings.

0

So etwas wie

foreach (str in strings) { 
    if (mystring.contains(str)) { 
     ... 
    } 
} 

arbeiten kann.

+0

enthält? Keine Funktion –

5

indexOf Verwendung ist erste, was in den Sinn kommt, jedoch müssen Sie im Auge behalten, dass gibt es keine .indexOf Funktion bei älteren IEs (so würden Sie Ihren eigenen Code verwenden, um es zu simulieren, oder einfach nur geradeaus gehen zu etwas wie jQuery.inArray oder underscore.js indexOf).

if ([ 'a', 'b', 'c' ].indexOf(mystring) > -1) { ... } 

Randbemerkung: wie Sie, indem Sie auf InArray Definition in jQuery Quelle sehen können, Ihre eigenen indexOf Ersatz schreiben, ist recht einfach. So wie ich schon sagte - schreibe deine eigene Methode, kopiere sie aus anderen Bibliotheken oder benutze einfach diese Bibliotheken, wenn du indexOf in jedem Browser verwenden willst.

+0

danke +1 für den IE heads-up – Diego

0

Ihre Version ist die schnellste für drei Zeichen und die am besten lesbaren.

mit ein wenig mehr mögliche Werte, könnten Sie so etwas wie folgt verwenden:

var c; 
if (s.length==1 && (c=s.charAt(0))>='a' && c<='c') { 

Aber das ist in erster Linie für Spaß ...

1

arbeiten werde ich etwas so denken:

if (["a", "b", "c"].indexOf(mystring) != -1) { 
    // do something 
} 
1
if (["a", "b", "c"].indexOf(mystring) != -1) {} 

Dies wäre der beste Weg sein, aber es ist nicht auf einigen Browsern funktionieren.

0

Addtionally:

String.prototype.in = function(){ 
    return ~[].slice.call(arguments).indexOf(this.valueOf()) ? true : false; 
} 
//usage 
var myStr = 'a'; 
myStr.in('a','b','c'); //=> true 
'd'.in('a','b','c'); //=> false 

Für älteren Browser: Diese MDN page enthält eine Shim für Array.indexOf

Verwandte Themen