JavaScript枚举器?

JavaScript枚举器?,javascript,Javascript,我想定义具有连续整数值的常量列表,例如: var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2}; 但每次我需要在其中添加新元素时,添加一个“XX”:y都很无聊。 所以我想知道C语言中是否有类似于枚举器的东西,这样我就可以写: var config.type={“RED”、“BLUE”、“YELLO”}并自动为它们指定唯一的整数值。只需使用数组: var config.type = ["RED", "BLUE", "YELLO"];

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

var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2};  
但每次我需要在其中添加新元素时,添加一个
“XX”:y
都很无聊。
所以我想知道C语言中是否有类似于
枚举器的东西,这样我就可以写:
var config.type={“RED”、“BLUE”、“YELLO”}
并自动为它们指定唯一的整数值。

只需使用数组:

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

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

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

我想您可以创建一个接受数组的函数:

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}
函数常数(arr){
for(var i=0,len=arr.length,obj={};i

或者使用相同的函数,并将其添加到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}
Array.prototype.constants=function(){
for(var i=0,len=this.length,obj={};i
您也可以尝试这样做:

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 );
函数枚举(值){
对于(变量i=0;i
甚至使用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 );
函数枚举(){
对于(变量i=0;i
定义枚举:

var type = {
  RED: 1,
  BLUE: 2, 
  YELLO: 3 
};
获取颜色:

var myColor = type.BLUE;

这还允许您执行
config.type.indexOf('BLUE');//1
如果您已经有了颜色并且需要找到索引值,则得到相反的结果。@daybreaker,这也应该是真的,也许我没有说清楚。我想引用这样的类型:config.type.RED或config.type.BLUE,而不是config.type[0]您不能使用函数的
参数
变量来执行第一个函数,并传递不确定数量的参数而不是数组吗?@ngen也许我没有说清楚。我希望引用这样的类型:config.type.RED或config.type.BLUE,而不是config.type[0]