2010-11-26 15 views
20
を対応する

は、だから、私は、ページのJavaScriptでこれを持っている:Javascriptを列挙文字列値

var TEST_ERROR = { 
     'SUCCESS' : 0, 
     'FAIL'  : -1, 
     'ID_ERROR' : -2 
     }; 

そしてそうのようにページ内の関数のテストを実行します。

function test() 
{ 
    // Get the paragraph from the DOM 
    var testResultParagraph = document.getElementById('testResult'); 

    // Check the paragraph is valid 
    if(!testResultBox) 
    { 
     // Update the web page 
     testResultParagraph.value = TEST_ERROR.ID_ERROR; 
     return TEST_ERROR.ID_ERROR; 
    } 

    // Something to store the results 
    var testResult = TEST_ERROR.SUCCESS; 

    // Test the calculation 
    testResult = testCalculate() 

    // Update the web page 
    testResultParagraph.value = testResult; 

    // The test succeeded 
    return TEST_ERROR.SUCCESS; 
} 

testCalculate()の結果をと段落の値は、結果に応じて0、-1、-2のいずれかになります。

var TEST_ERROR = { 
     'SUCCESS' : {VALUE : 0 , STRING: 'Success' }, 
     'FAIL'  : {VALUE : -1, STRING: 'Fail' }, 
     'ID_ERROR' : {VALUE : -2, STRING: 'Id Error'}, 
     }; 

は、今私は、段落ショー「成功」、「失敗」または「IDエラー」

は私が考え出してきたこのいくつかの方法を行うことができるように文字列にこれをマッピングします

は(result > TEST_ERROR.SUCCESSは奇妙カントーだ!)列挙ドットアクセサへの変更を必要とする、またはロジックの変更が必要になる

var TEST_ERROR = { 
     'SUCCESS' : 0, 
     'FAIL'  : 1, 
     'ID_ERROR' : 2 
     }; 

var TEST_STRING = [ 
     'Success', 
     'Fail', 
     'ID Error' 
     ]; 

私の質問は、Javascriptで列挙値を文字列値にマッピングする方法はどうですか?私は第2の方法が最も賢明だと思っていますが、列挙子が成功のために肯定的であり、失敗のために否定的であることを望みます。私はまた、オブジェクト構造の文字列と値を含む最初のアイデアが気に入っています。

アイデア?

ありがとうございます!

マット

PS。私はWeb Workerでテストを行っているので、ページがハングしないようにして、結果を上のような段落ではなくテーブルに入れます。

PPS。私はJavascriptのプログラミングにはかなり新しいですが、ASM、C、C++、C#で多くのことをします。

+0

答えをいただきありがとうございます。私はこのプロジェクトのかなり早い段階ですので、回答を受け入れますが、現時点でどの方向に進むのかはわかりません。 –

答えて

17

実際に数値が必要ですか?そうでなければ、次のようなものを使うことができます:

var TEST_ERROR = { 
    SUCCESS : 'Success', 
    FAIL  : 'Fail', 
    ID_ERROR : 'ID Error' 
}; 
+0

私はこれが好きでシンプルです。私は 'if(result!= TEST_ERROR.SUCCESS)'を実行し、あなたの答えを使うことができます。 TEST_ERROR.SUCCESS以外の他のパス状態が必要かどうかを見てみましょう。 –

17

かなり最適ではない、しかし、あなたが事前に計算逆辞書(とあなたはわずか数列挙値を持っている場合以外にも、これが問題のあまりすべきではない)なしで取得することができますクリーン:

function string_of_enum(enum,value) 
{ 
    for (var k in enum) if (enum[k] == value) return k; 
    return null; 
} 
+1

素晴らしい作品です!これは受け入れられた答えでなければなりません。 – Alex

+0

非常に良い。私は** enum [value]を返すと思う; **もうまくいくだろう。 – jramos

3

いつも値は特定のタイプのオブジェクトであることができます。今

var TEST_ERROR = (function() { 
    function ErrorValue(value, friendly) { 
    this.value = value; 
    this.friendly = friendly; 
    } 
    ErrorValue.prototype = { 
    toString: function() { return this.friendly; }, 
    valueOf: function() { return this.value; } 
    }; 
    return { 
    'SUCCESS': new ErrorValue(0, 'Success'), 
    'FAIL': new ErrorValue(1, 'Fail'), 
    'ID_ERROR': new ErrorValue(2, 'ID error') 
    }; 
})(); 

あなたはその型の値を取得する:あなたが実際に

alert(err.toString()); 

で文字列値を取得することができます

var err = testFunction(whatever); 

あなたも、明示的.toString()を呼び出す必要はありません、 ほとんどの時間。

+0

良いですが、列挙子オブジェクトの '.toString()'に分かりやすいようです。私はちょうどこれを使い始めているので、LukeHのソリューションを必要とするかどうか考える必要があります。 –

関連する問題