JavaScript枚举器?

时间:2011-06-14 16:23:14

标签: javascript

我想定义一个具有连续整数值的常量列表,例如:

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

但每次我需要在其中添加新元素时添加"XX" : y都很无聊。
所以我想知道在C中有类似enumerator的东西所以我可以写:
var config.type = {"RED", "BLUE", "YELLO"}并且它们会自动获得唯一的整数值。

5 个答案:

答案 0 :(得分: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 );

甚至使用arguments参数,你可以完全取消数组:

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 );

答案 1 :(得分:4)

只需使用数组:

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

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

答案 2 :(得分:2)

使用数组([])而不是对象({}),然后将数组翻转为交换键/值。

答案 3 :(得分: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}

答案 4 :(得分:0)

定义枚举:

var type = {
  RED: 1,
  BLUE: 2, 
  YELLO: 3 
};

获取颜色:

var myColor = type.BLUE;