Перечислитель JavaScript?
Я хочу определить список констант, которые имеют непрерывное целочисленное значение, например:
var config.type = {"RED": 0, "BLUE" : 1, "YELLO" : 2};
Но скучно добавлять "XX" : y
каждый раз, когда мне нужно добавить в него новый элемент.
Так что мне интересно, есть что-то вроде enumerator
в C, поэтому я могу просто написать:
var config.type = {"RED", "BLUE", "YELLO"}
, и они получают уникальное целочисленное значение автоматически.
Ответы
Ответ 1
Вы также можете попробовать сделать что-то вроде этого:
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 );
Ответ 2
Просто используйте массив:
var config.type = ["RED", "BLUE", "YELLO"];
config.type[0]; //"RED"
Ответ 3
Используйте массив ([]
) вместо объекта ({}
), затем переверните массив для замены ключей/значений.
Ответ 4
Я предполагаю, что вы можете создать функцию, которая принимает массив:
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}
Ответ 5
Определите Enum:
var type = {
RED: 1,
BLUE: 2,
YELLO: 3
};
получить цвет:
var myColor = type.BLUE;