2011-06-14 7 views
9

मैं उदाहरण के लिए, स्थिरांक है कि निरंतर पूर्णांक मान की एक सूची निर्धारित करना चाहते:जावास्क्रिप्ट एन्यूमेरेटर?

var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2}; 

लेकिन यह एक "XX" : y हर बार जब मैं उस में एक नए तत्व जोड़ने की जरूरत है जोड़ने के लिए उबाऊ है।
तो मुझे आश्चर्य है कि enumerator सी में कुछ ऐसा है, इसलिए मैं बस लिख सकता हूं:
var config.type = {"RED", "BLUE", "YELLO"} और उन्हें स्वचालित रूप से अद्वितीय पूर्णांक मान दिया जाता है।

+1

क्यों बस का उपयोग नहीं एक सरणी? – ngen

+0

@ngen शायद मैंने इसे स्पष्ट नहीं किया। मैं इस तरह के प्रकार को संदर्भित करना चाहता हूं: config.type.RED या config.type.BLUE, config.type नहीं [0] – wong2

उत्तर

15

तुम भी कुछ इस तरह से करने की कोशिश कर सकते हैं:

function Enum(values){ 
    for(var i = 0; i < values.length; ++i){ 
     this[values[i]] = i; 
    } 
    return this; 
} 
var config = {}; 
config.type = new Enum(["RED","GREEN","BLUE"]); 
// check it: alert(config.type.RED); 

या यहाँ तक कि तर्क पैरामीटर का उपयोग कर, आप पूरी तरह सरणी के साथ भाग कर सकते हैं:

function Enum(){ 
    for(var i = 0; i < arguments.length; ++i){ 
     this[arguments[i]] = i; 
    } 
    return this; 
} 
var config = {}; 
config.type = new Enum("RED","GREEN","BLUE"); 
// check it: alert(config.type.RED); 
4

बस एक सरणी का उपयोग करें:

var config.type = ["RED", "BLUE", "YELLO"]; 

config.type[0]; //"RED" 
+1

यह आपको 'config.type.indexOf (' BLUE ') करने देता है; // 1' रिवर्स प्राप्त करने के लिए यदि आपके पास पहले से रंग हैं और इंडेक्स मान ढूंढने की आवश्यकता है। – daybreaker

+0

@daybreaker, यह भी सच होना चाहिए – Neal

+1

शायद मैंने इसे स्पष्ट नहीं किया। मैं इस तरह के प्रकार को संदर्भित करना चाहता हूं: config.type.RED या config.type.BLUE, config.type नहीं [0] – wong2

2

एक वस्तु ({}) के बजाय एक सरणी ([]) का उपयोग करें, तो सरणी कुंजियों/मूल्यों स्वैप करने के लिए फ्लिप।

1

मैं तुम्हें एक समारोह है कि किसी सरणी स्वीकार करता है बना सकता है लगता है:

function constants(arr) { 

    for(var i = 0, len = arr.length, obj = {}; i < len; i++) { 
     obj[ arr[i] ] = i; 
    } 
    return obj; 
} 


var config.type = constants(["RED", "BLUE", "YELLO"]); 

console.log(config.type); // {"RED": 0, "BLUE" : 1, "YELLO" : 2} 

या एक ही समारोह लेते हैं, और Array.prototype में जोड़ें।

Array.prototype.constants = function() { 

    for(var i = 0, len = this.length, obj = {}; i < len; i++) { 
     obj[ this[i] ] = i; 
    } 
    return obj; 
} 


var config.type = ["RED", "BLUE", "YELLO"].constants(); 

console.log(config.type); // {"RED": 0, "BLUE" : 1, "YELLO" : 2} 
+1

क्या आप फ़ंक्शन के 'तर्क' चर का उपयोग करके और पहला कार्य नहीं कर सकते एक सरणी के बजाय पैरामीटर की अनिश्चित मात्रा में? – Neal

+0

@Neal: बिल्कुल। अच्छी बात। – user113716

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