2

複数の変数を宣言するには、のようなショートカットがあることを私は知っていますvar x=1,y=2,z=3

ここで、1つのif変数をテストするステートメントがあるが、そのような多くの値については、次のようになります。

if (x==1 || x==15 || x==25 || x==150){

}

x実際の例では、これははるかに長いものになるため、毎回変数の名前を記述せずに、これらすべての値を次々に列挙するためのショートカットを見つけたいと思います)

どうすればいいですか?

4

5 に答える 5

4

可能な値の配列を使用して、変数がその中で発生するかどうかをテストできます。

if ([1, 15, 25, 150].indexOf(x) > -1) {

ただし、これはIE8以前ではサポートされていません。古いブラウザの回避策を含むMDNドキュメントを参照してください。

于 2012-08-07T18:55:52.017 に答える
4

ケーススイッチステートメントを検討しましたか?あまりギミックではありませんが、十分に活用されておらず、読みやすく、他のほとんどのプログラミング言語に移植できます。

switch (x) {
case 1:
case 15:
case 25:
case 150:
  // do something
  break;
}

パフォーマンスが心配な場合は、jsPerfテストケースを実行しました。この手法はChromeで最速でした。

于 2012-08-07T18:57:32.723 に答える
4

inArrayを使用してこれを行うことができます(クロスブラウザ互換)

if(jQuery.inArray(x,[1,15,125,150]) > -1)
{
}
于 2012-08-07T18:57:52.160 に答える
3

チェックする項目がたくさんある場合は、(JavaScriptオブジェクトを使用した)マップを整理して、すべてのブラウザーで機能させることができます。

var items = {1:true, 15:true, 25:true, 150:true};
if (items[x] === true) {
    // Found x in items
}

アイテムの数が多い場合、マップは、配列を線形に検索する他の例よりも効率的なルックアップメカニズムです。

ifまた、複数行のステートメントよりも保守が非常に簡単なコードだと思います。

于 2012-08-07T19:05:03.423 に答える
0

UnderscoreJSには.any関数があります:

var testArray = [1,15,125,150];
if (_.any(testArray, function (item) { return item === x; })) {
  // do stuff
}

ライブラリには、配列を処理するための優れた機能がたくさんあります。

于 2012-08-07T19:26:21.047 に答える