3


これは、私が取り組んでいるプロジェクトで数回発生しました。実際に実行せずにスイッチを「テスト」して、スイッチにケースがあるかどうかを判断するにはどうすればよいですか?

ケースを実行する必要がある場合、確認する効率的な方法はありますか?

前もって感謝します。

すなわち

if (runSwitch(switch.hasCase("casename2"))) {
    alert("I've got it!");
}
else {
    alert("nope");
}

function runSwitch(case) {
    switch (case) { // Any way to skip the function?
        case "casename0" : alert("case"); break;
        case "casename1" : alert("case"); break;
        case "casename2" : alert("case"); break;
        case "casename3" : alert("case"); break;
    }
}
4

3 に答える 3

5

何をするにしても、すべてのケースをチェックするので、スイッチを介して実行するのが最適です。実行する前にケースがあるかどうかを確認したいだけの場合は、それらを配列に追加し、インデックスが存在するかどうかを確認します。

var cases = ['case1', 'case2'];
if (cases.IndexOf('case1') >= 0) {
    // the case is there
}
于 2012-11-19T02:23:16.943 に答える
0

スイッチにケースがあるかどうかを判断する唯一の方法は、実際にケースステートメントを実行することです。ケース ブロックが実際に実行されたかどうかを知りたい場合は、ブール値を返すことができます。

function runSwitch(_case) {
    var hasCase = false;
    switch(_case) {
        case 'casename0': hasCase = true; alert('case'); break;
        case 'casename1': hasCase = true; alert('case'); break;
        case 'casename2': hasCase = true; alert('case'); break;
        case 'casename3': hasCase = true; alert('case'); break;
        default: break;
    }
    return hasCase;
}

その後、次を使用してステートメントを実行できます。

if(runSwitch('casename4')) {
    //The case statement ran
}
else {
    //The case statement did not run
}
于 2012-11-19T02:20:49.907 に答える
0

David Schwartz が回答を投稿しなかったので、私の解決策 (ほとんど解決策ではありません) と、私が理解している彼の解決策のデモと説明を投稿します。

私の解決策:

スイッチの唯一の目的は入力に応じて変数を設定することだったので、スイッチの使用をやめて JSON (配列) に切り替えただけです。

配列を使用する場合、「ケース」が存在するかどうかを確認するのは簡単です (存在しない場合は run を実行するだけでarrayVar["casename"]、存在しない場合は undefined が返されます)。追加の変数で名前空間を詰まらせる必要はありません。文字列とedとして提供する必要があるため難しいevalですが、全体的にこれは私にとってははるかにうまく機能します.

実際にはこの問題の解決策ではないため、デモやコードを投稿する必要はありません。

David Schwartz のソリューション:

デモ: http://jsfiddle.net/SO_AMK/s9MhD/

コード:

function hasCase(caseName) { return switchName(caseName, true); } // A function to check for a case, this passes the case name to switchName, sets "just checking" to true and passes the response along
function runSwitch(caseName) { switchName(caseName); } // This is actually a mostly useless function but it helps clarify things

function switchName(caseName, c) { // And the actual function, c is the "just checking" variable, I shortened it's name to save code
    switch(caseName) { // The switch
        case "casename0" : if (c) return true; alert("case"); break; // If c is true return true otherwise continue with the case, returning from inside a case is the same as calling break;
        case "casename1" : if (c) return true; alert("case"); break;
        case "casename2" : if (c) return true; alert("case"); break;
        case "casename3" : if (c) return true; alert("case"); break;
        default: if (c) return false; break; // If nothing else ran then the case doesn't exist, return false
    }
    return c; // Even I (:D) don't understand where this gets changed, but it works
}

説明: 上記のコードは、必要に応じてコメント化されています。</p>

于 2012-11-19T21:16:51.823 に答える