2012-10-08 10 views
17

Powiel możliwe:
array.contains(obj) in JavaScriptJak mogę porównać ciąg z kilkoma wartościami?

Coś jak:

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

ja skacze zrobić:

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

jest to możliwe?

+3

Twój przykład jest źle, jesteś przypisując a nie porównanie. – epascarello

+0

prawda, to był literówka. dzięki – Diego

+0

Nie mówię o tablicach @ DanielA.White, wiem, że mogę dodać ciągi do jednego, ale uważam, że istnieją sposoby, aby to zrobić bez – Diego

Odpowiedz

18

Można użyć indexOf() jak ten

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

EDIT Z ES7 przychodzi trochę uproszczenie. Na dzień dzisiejszy tylko Chrome 47+ i 43+ FF wydaje się go wspierać:

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

dzięki, wydaje się być najprostszym sposobem. – Diego

+0

Dzięki! Pan SIrko –

1

Można użyć indexOf

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

Tak, można sprawdzić, czy indexOf zwraca -1.

Podobne do ciągów.

0

Coś

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

może pracować.

+0

zawiera? Nie jest to funkcja –

5

Korzystanie indexOf jest pierwszą rzeczą, która przychodzi do głowy, jednak trzeba pamiętać, że nie ma .indexOf funkcja u starszych IES (tak trzeba by użyć niestandardowego kodu to zasymulować, lub po prostu iść prosto do czegoś takiego jak jQuery.inArray lub underscore.js indexOf).

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

marginesie: jak widać patrząc na definicję inArray w źródle jQuery, pisząc własną wymianę IndexOf jest całkiem proste. Tak jak powiedziałem - napisz własną metodę, skopiuj i wklej ją z innych bibliotek lub po prostu użyj tych bibliotek, jeśli chcesz mieć możliwość korzystania z indexOf w każdej przeglądarce.

+0

dzięki +1 dla IE heads up – Diego

0

Twoja wersja jest najszybsza dla trzech znaków i najbardziej czytelna.

trochę więcej możliwych wartości, można użyć mniej więcej tak:

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

Ale to głównie dla zabawy ...

1

myślę tak:

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

byłby to najlepszy sposób, jednak może nie działać na niektórych przeglądarkach.

0

wprowadzenie dodatkowego: można utworzyć rozszerzenie String dla porównania:

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 

dla starszych przeglądarek: ta MDN page zawiera podkładkę dla Array.indexOf

Powiązane problemy