2011-01-31 6 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 –

+0

@Jasonルブラン私が持っています素敵なデモのための+1ですが、[もっとよく使うことはありません]常に*明快なファースト*です。遅いFF掲示のために私のCPUを責める;-) –

答えて

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

または

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

'this.id'が' 'a''ならば、最初の例はそれを知らないでしょう。 – ClosureCowboy

+0

おっと、ありがとう。編集されました。 –

+0

@ limcのamswer(d in o)は、それと似た、最も速い方法です。あなたが提供したパフォーマンスリンクをありがとう。 – Hussein

6

これはいかがですか?

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

...これか?

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

+0

** + 1 **おそらくダミー値として '1'を使用しないでしょう。 – ClosureCowboy

+0

@ClosureCowboy:ヒントをいただきありがとうございます...私はまた、私の意見ではそれが本当に読みにくいですが、別の例を追加しました。 :) – limc

+0

私はすべてのlettereを1つの単語として結合しません。これは変数が1文字以上の場合はうまくいかないが、これはうまくいきません。 – Hussein

1

次のコードを試すことができます。特に4つ以上のテスト値がある場合。

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

変数が1文字以上の場合はどうですか? – Hussein

+0

'if(/ ^(val1 | val2 | val3)$ /。test(this.id)){...}' –

+0

この2つのアイデアも含めてテストスクリプトを更新しました。 –

2

1つの可能性はswitch文です。

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

でも動作しますが、私の場合のように4回もcaseという単語を繰り返すことになり、this.idという単語を4回繰り返します。 – Hussein

+0

@alex:そうですが、ちょっと短いので、私はそこに投げ捨てると思っていました。 :o) – user113716

+0

+1 – Hussein

0

ハッシュ試験のインラインなかったため、インライン無名ハッシュ(d in o)性能は、tests as originally writtenに誤って伝えました。

奇妙なことに、真のインラインハッシュの場合は、事前に定義されたハッシュの場合に比べて、Firefoxの4はるかに遅いが、

クロム12内50%速いしかし、より重要な点は、ということですd in oは、ハッシュのポイントを逃してしまいます。ハッシュのポイントは、繰り返し検索する必要はありません。

2本のラインが、それでもかなり短く、そしてby far the fastest

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