2011-01-31 34 views
7

有沒有簡短的方法使用JavaScript或jQuery編寫以下代碼?這段JavaScript「if」語句的較短代碼

if (this.id==="a" || this.id==="b" || this.id==="c" || this.id==="d") 
+5

這裏有一個網頁進行比較的各種建議如下性能:http://jsperf.com/set-memberbship – 2011-01-31 02:21:18

+0

@Jason勒布倫我有一個爲好的演示+ 1,但作爲[更經常 - 然後 - 不]總是,*清晰度第一*。我把我的CPU歸咎於緩慢的FF發佈;-) – 2011-01-31 03:12:10

回答

5
if (['a','b','c','d'].indexOf(this.id) >= 0) { ... } 

if (this.id in {'a':0,'b':0,'c':0,'d':0}) { ... } 
6

這個怎麼樣?

if (this.id in { "a":1, "b":1, "c":1, "d":1 }) { 
    ... 
} 

......還是這個?

if("abcd".indexOf(this.id) > -1) { 
    ... 
} 

+0

** + 1 **雖然我可能不會使用'1'作爲虛擬值。 – ClosureCowboy 2011-01-31 02:12:28

+0

@ClosureCowboy:謝謝你的提示......我還添加了另一個例子,雖然它在我看來確實不可讀。 :) – limc 2011-01-31 02:14:07

+0

我不會合並所有的一言一行。如果變量超過1個字母,這將不起作用,儘管這是一個很好的寫法。 – Hussein 2011-01-31 02:17:24

1

你可以試試下面的代碼。特別是當你有超過四個測試值時。

if (/^[abcdef]$/.test(this.id)) { 
    ... 
} 
2

其中一種可能性是switch語句。

switch(this.id){case"a":case"b":case"c":case"d": 
    //do something 
} 
0

的聯匿名哈希(d in o)性能誤傳在tests as originally written,因爲哈希沒有在測試中內聯。

奇怪的是,真直列散列情況下,與預定的散列的情況下,是在火狐4慢得多,但速度更快50%鉻12

但更重要的一點是d in o錯過了散列點 - 你不必迭代去查找東西。

兩條線,但仍然很短,並且by far the fastest

var o = {a:1,b:1,c:1,d:1}; 
if(o[this.id]){...}