1. ホーム
  2. javascript

[解決済み] javascript: switch caseで条件を使用する

2022-09-25 04:49:15

質問

くだらない質問で申し訳ありません。 javascriptのswitch-case言語要素でcaseの条件を使うにはどうしたらいいのでしょうか? 下記の例のように、ケースは、変数 liCount が<=5と>0である場合にマッチするはずなのですが、私のコードはうまくいきません。

switch (liCount) {
    case 0:
        setLayoutState('start');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount<=5 && liCount>0):
        setLayoutState('upload1Row');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount<=10 && liCount>5):
        setLayoutState('upload2Rows');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount>10):
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;                  
}

アドバイスありがとうございました。

どのように解決するのですか?

これは動作します。

switch (true) {
    case liCount == 0:
        setLayoutState('start');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount<=5 && liCount>0:
        setLayoutState('upload1Row');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount<=10 && liCount>5:
        setLayoutState('upload2Rows');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount>10:
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;                  
}

必要なのは switch(true){...} で、case式がbooleanに評価されることです。

これは、switchに与えた値が比較の基準として使用されるためです。その結果、case 式もブール値として評価され、どのケースが実行されるかが決定されます。これを逆手にとって switch(false){..} を渡して、目的の式を true ではなく false に評価させることもできますが、個人的には真偽を評価する条件を扱う方が好きです。しかし、これも動作するので、何をしているのか理解するために覚えておく価値があります。

例: liCountが3である場合、最初の比較は true === (liCount == 0) であり、最初のケースは偽であることを意味します。そして、スイッチは次のケースに移ります。 true === (liCount<=5 && liCount>0) . この式は真と評価され、このケースが実行されることを意味します。 break . ここではわかりやすくするために括弧をつけましたが、式の複雑さによっては括弧は省略可能です。

これはとてもシンプルで、長い一連の条件を処理するためのきちんとした方法です (あなたがやろうとしていることに合っていれば)。 ìf() ... else if() ... else if () ... の長いシリーズが多くの視覚的なノイズや壊れやすさを導入するかもしれません。

有効なコードであるにもかかわらず、非標準的なパターンであるため、注意して使用してください。