我想定義具有連續的整數值的常量列表,例如: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