2010-11-26 20 views
20
अनुरूप करने के लिए

तो मैं अपने पृष्ठ के लिए जावास्क्रिप्ट में यह है:जावास्क्रिप्ट Enum स्ट्रिंग मान

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'}, 
     }; 
:

अब मैं एक स्ट्रिंग को यह मैप करने के लिए इतना है कि पैरा शो 'सफल', 'असफल' या 'आईडी त्रुटि'

मैं इस के लिए कुछ तरीके मैं लगा कर सकता है चाहता हूँ

enum डॉट accessors में संशोधन की आवश्यकता होगी, या

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

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

कौन सा तर्क में परिवर्तन (result > TEST_ERROR.SUCCESS यद्यपि अजीब लगता!)

012 की आवश्यकता होगी

मेरा प्रश्न यह है कि आप जावास्क्रिप्ट में एक स्ट्रिंग मान के लिए गणनाकर्ता मान को मैप करने के बारे में कैसे जाएंगे? मैं सोच रहा हूं कि दूसरा तरीका सबसे समझदार है, लेकिन यह चाहते हैं कि गणक सफल होने के लिए सकारात्मक और असफल होने के लिए नकारात्मक हो। मुझे ऑब्जेक्ट स्ट्रक्चर में स्ट्रिंग्स और वैल्यू वाले पहले के विचार को भी पसंद है।

कोई भी विचार?

धन्यवाद!

मैट

पी एस। मैं एक वेब वर्कर में परीक्षण करने जा रहा हूं, ताकि पृष्ठ लटका न सके और परिणाम तालिका में डाले जाएंगे, ऊपर जैसा पैराग्राफ नहीं।

पी पी एस। मैं जावास्क्रिप्ट प्रोग्रामिंग के लिए काफी नया हूं, लेकिन एएसएम, सी, सी ++, सी # में बहुत कुछ करता हूं।

+0

जवाब के लिए धन्यवाद, मैं इस परियोजना में बहुत जल्दी पर हूँ तो एक जवाब है, लेकिन यकीन नहीं किस दिशा मैं पल में जा रहा हो जाएगा स्वीकार करेंगे। –

उत्तर

17

क्या आपको वास्तव में संख्यात्मक मूल्यों की आवश्यकता है? यदि नहीं तो आप इस तरह कुछ उपयोग कर सकते हैं:

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

मुझे यह पसंद यह अच्छा और सरल है। मैं सिर्फ 'अगर (परिणाम! = 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

बढ़िया काम करता है! यह स्वीकार्य उत्तर होना चाहिए, किसी भी enum के लिए काम करता है, कोई सीमा नहीं है। – Alex

+0

बहुत अच्छा। मुझे लगता है ** वापसी एनम [मूल्य]; ** भी काम करेगा। – 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') 
    }; 
})(); 

अब जब आप उस प्रकार के मूल्य मिलता है:

var err = testFunction(whatever); 

आप

alert(err.toString()); 

वास्तव में साथ स्ट्रिंग मान प्राप्त कर सकते हैं आप भी .toString() स्पष्ट रूप से कॉल करने के लिए नहीं होना चाहिए , सर्वाधिक समय।

+0

अच्छा, गणनाकर्ता वस्तु के लिए '.toString()' में समझदार इमारत लगती है। मैं बस इसके साथ शुरुआत कर रहा हूं इसलिए मुझे यह सोचने की ज़रूरत होगी कि मुझे ल्यूकएच समाधान पर इसकी आवश्यकता है या नहीं। –

संबंधित मुद्दे