2016-07-27 8 views
0

は、私はこのようなswitch文を持っています。switchステートメントで特定のケースで複数のコードブロックを実行するにはどうすればよいですか?</p> <pre><code>switch(a) { case 0: // do something break; case 1: // do something else break; } </code></pre> <p>私は何をしたいことは例えばとき<code>a == 2</code>コードの両方のブロックを実行している:

switch(a) { 
    case 0: 
    case 2: 
     // do something 
     break; 
    case 1: 
    case 2: 
     // do something else 
     break; 
} 

をが、最初のbreak文は、全体のswitch文を終了しているため、明らかにそれは動作しません:私はこのような何かを書きたいと思います。私はヘルパー関数を書いていたとまで来ることができました

唯一の方法:

function case0() { 
    // do something 
} 

function case1() { 
    // do something else 
} 

switch(a) { 
    case 0: 
     case0(); 
     break; 
    case 1: 
     case1(); 
     break; 
    case 2: 
     case0(); 
     case1(); 
     break; 
} 

このソリューションでは、ビット冗長と私には醜いようです。私が望むものを達成するためのより良い方法はありますか?

+1

'switch'文が十分に複雑です。あなたが提案しているのは、彼らが基本的なレベルでどのように働くかへの変化です。なぜ関数へのリンクを持つことができるマッピングテーブルを使わないのですか? '{2:function(){...}}'などです。 – tadman

+0

さて、私が 'switch 'に入れておきたい主な理由は、' switch'ステートメントに自分のプロジェクトをビルドしたことです。私が記述したことを実行できるように、すべてを別のものに書き換えたくないということです。 – BoltKey

+0

あなたが望むものとできるJavaScriptは、2つの異なるものです。あなたは現実に屈したり、あなたの人生をそれと戦ったりしたいですか?必要に応じて[TC39を通じてECMAScriptグループに申請する](https://tc39.github.io/process-document/)を歓迎します。時には、私たちが最もよく考えているアプローチは、うまくいかない場合があります。学び、適応し、動く – tadman

答えて

2

switchでは、最初の真の状態から最も近いbreakまでステートメントコードが実行されます。したがって、あなたのケースでは、次のような構造が働くかもしれません

var a = 2;//1;//0;//-1; 
switch(a){ 
    case 2: //and also one and zero 
    console.log('two'); 
    case 1: //and also zero 
    console.log('one'); 
    case 0: //zero only 
    console.log('zero'); 
    break; 
    default: //no matches 
    console.log('default'); 
} 
+0

このタイプの実行は、フォールスルー実行と呼ばれます。わかっているように、あなたはそれを書いています。ブレイクステートメントがなければ、スイッチは最初の真の条件を見つけ、途中ですべてのケースを実行するスイッチの閉じるブレースになります。このタイプの実行は、C#、C++、Java、javascriptなどにありますが、私は確信しています。 VB.netは一般的なコンセンサスに固執しない1つの言語です。 –

+0

この回答は問題の解決に非常に近いものですが、それでもケース1は独立して実行できません。 – trevor

0

あなたが望むものを達成するためによりよい方法があった場合は、まあ、私の解決策は、適格かどうかが「よりよい」のあなたの定義に依存しますが、ここにある...

を尋ねましたとにかく:

あなたはこのようなあなたのswitch文を行うことができます。

switch(a) { 
    case 0: 
    caseHandler([0]); 
    break; 
    case 1: 
    caseHandler([1]); 
    break; 
    case 2: 
    caseHandler([0,1]); 
    break; 
} 

そして、単一のヘルパーのfuに値の配列を渡します

function caseHandler(values) { 
    for (var i = 0; i < values.length; i++) { 
    switch (values[i]) { 
     case 0: 
     console.log('doing zero stuff'); 
     break; 
     case 1: 
     console.log('doing one stuff'); 
     break; 
    } 
    } 
} 
関連する問題

 関連する問題