0

次のようなコードがあります。

TheClass = TheAjaxIndicator.prop('class');

if (TheClass.indexOf('Blue') > 0) { TheHTML = TheHTMLBlue; }
if (TheClass.indexOf('White') > 0) { TheHTML = TheHTMLWhite; }
if (TheClass.indexOf('Green') > 0) { TheHTML = TheHTMLGreen; }
if (TheClass.indexOf('Brown') > 0) { TheHTML = TheHTMLBrown; }

ifこれらすべてのステートメントを回避するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

1

正規表現を使用して、コードを短く (必ずしも効率的とは限りません) 記述する方法の例:

var html = {
   'Blue': TheHTMLBlue,
   'White': TheHTMLWhite,
   // ...
};

var match = TheClass.match(/Blue|White|Green|Brown/);
// also possible:
// var match = TheClass.match(RegExp(Object.keys(html).join('|'));
if (match) {
    TheHTML = html[match[0]];
}
于 2013-01-24T02:34:22.947 に答える
0

クラス名と値をマップに入れ、マップを繰り返して一致を探します。 ここ (jsfiddle)は、この方法で行う方法の例です。

var classToHtmlMap = {
    'Blue': TheHTMLBlue,
    'White': TheHTMLWhite,
    'Green': TheHTMLGreen,
    'Brown': TheHTMLBrown
}

var TheHTML;
var TheAjaxIndicator = $("#TheAjaxIndicator");
$.each(classToHtmlMap, function(key, value) {
    if(TheAjaxIndicator.hasClass(key)) {
        TheHTML = value;
            return false;
    }
});

ちなみにこれはjQueryを使っていますが、やり方はどうやっても同じです。

于 2013-01-24T02:35:23.470 に答える
-1

pascalCaseではなく、ローカル変数が使用する変数命名規則に従うことをお勧めしますTitleCase。余談です。

コードifにステートメントが含まれていても、パフォーマンスにまったく悪影響はありません。これは 2013 年であり、JIT スクリプト エンジンがあります。あなたのコードも非常に読みやすいです-私はそれを変更する理由がありません(命名規則以外)。switchただし、ステートメントを使用できますが、属性が単一の値である場合に限ります。class

switch( theAjaxIndicator.prop('class') ) {
    case "Blue" : theHTML = theHTMLBlue;  break;
    case "White": theHTML = theHTMLWhite; break;
    case "Green": theHTML = theHTMLGreen; break;
    case "Brown": theHTML = theHTMLBrown; break;
}

楽しみたい場合や、コードを読もうとする人を混乱させる場合は、次evalのように を創造的に使用できます。

eval('theHTML = theHTML' + theAjaxIndicator.prop('class') + ';');

ただし、このコードはスクリプトの再コンパイルを強制するため、遅くなります。この場合、JITがどのように機能するかわかりません。

于 2013-01-24T02:15:27.370 に答える