2012-10-08 170 views
17

可能重複:
array.contains(obj) in JavaScript我怎樣才能比較一個字符串與幾個值?

喜歡的東西:

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

我跳做的事:

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

這可能嗎?

+3

墊片你舉的例子是錯誤的,你是分配和不進行比較。 – epascarello

+0

是真的,這是一個錯字。謝謝 – Diego

+0

我不是在談論數組@ DanielA.White,我知道我可以添加字符串到一個,但我相信有沒有方法來做到這一點,沒有 – Diego

回答

18

您可以使用indexOf()這樣

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

編輯隨着ES7配有點簡單化。截至今天不僅僅是Chrome 47+和FF的43+似乎支持:

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

謝謝,似乎是最簡單的方法。 – Diego

+0

謝謝! Mister SIrko –

1

您可以使用indexOf

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

所以,你可以檢查的indexOf返回-1。

字符串類似。

0

喜歡的東西

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

可能工作。

+0

包含?不是一個功能 –

5

使用的indexOf是想到的第一件事情,但是你要記住,這有年長的IE(所以你必須使用你的自定義代碼來模擬它,或者只是去直沒有.indexOf功能到像jQuery.inArrayunderscore.js indexOf)。

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

旁註:你可以通過查看jQuery的源inArray定義,編寫自己的indexOf更換看到的是很容易的。就像我說的那樣 - 編寫自己的方法,從其他庫中複製粘貼,或者如果您希望能夠在每個瀏覽器中使用indexOf,就使用這些庫。

+0

感謝+1爲IE提高 – Diego

0

您的版本是三個字符中速度最快,最具可讀性的版本。

有了多一點的可能值,你可以使用這樣的事情:

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

但是,這主要是爲了好玩...

1

我認爲像這樣的工作:

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

這將是最好的方式,但它可能無法在某些瀏覽器。

0

Addtionally:您可以創建用於比較的String擴展:

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 

對於舊的瀏覽器:這個MDN page包含Array.indexOf

相關問題