我想定义具有连续的整数值的常量列表,例如:JavaScript的枚举?
var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2};
但它是无聊加"XX" : y
每次我需要在里面添加新元素的时间。
所以我想知道是否有类似于C中的enumerator
,所以我可以写:
var config.type = {"RED", "BLUE", "YELLO"}
并且它们被自动赋予唯一的整数值。
我想定义具有连续的整数值的常量列表,例如:JavaScript的枚举?
var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2};
但它是无聊加"XX" : y
每次我需要在里面添加新元素的时间。
所以我想知道是否有类似于C中的enumerator
,所以我可以写:
var config.type = {"RED", "BLUE", "YELLO"}
并且它们被自动赋予唯一的整数值。
你也可以尝试做这样的事情:
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);
只需使用一个数组:
var config.type = ["RED", "BLUE", "YELLO"];
config.type[0]; //"RED"
这也可以让你做'config.type.indexOf('BLUE'); // 1'来获得相反的结果,如果你已经有了颜色并且需要找到索引值。 – daybreaker 2011-06-14 16:28:59
@daybreaker,这应该是真的 – Neal 2011-06-14 16:29:36
也许我没有说清楚。我想引用像这样的类型:config.type.RED或config.type.BLUE,而不是config.type [0] – wong2 2011-06-15 03:37:21
使用,而不是一个对象({}
)的阵列([]
),然后翻转数组来交换密钥/值。
我想你可以做的是接受一个数组的函数:
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}
你不能做第一个函数使用函数的'arguments'变量并传递在一个不确定的数量的参数,而不是一个数组? – Neal 2011-06-14 16:40:08
@尼尔:绝对。好点子。 – user113716 2011-06-14 16:54:23
为什么不直接使用数组? – ngen 2011-06-14 16:27:40
@恩也许我没有说清楚。我想引用像这样的类型:config.type.RED或config.type.BLUE,而不是config.type [0] – wong2 2011-06-15 03:36:32