Перечислитель 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;