Заполнить массив перечисляемой переменной — javascript

#javascript #jquery #arrays #enums

#javascript #jquery #массивы #перечисления

Вопрос:

Хорошо, у меня есть некоторый код, который заполняет массив из переменной enum в javascript. Однако он выглядит крайне устаревшим и неуклюжим.

Мне интересно, есть ли у кого-нибудь из вас, гуру jquery / javascript, более элегантный (наилучший) метод для этой функциональности.

ТЕКУЩИЙ: (который работает, но уродлив)

 var myEnum = {
first: 1,
second: 2,
third: 3};

if (Object.freeze)
Object.freeze(rolesEnum);
 

Создание массива (снова работает, но очень некрасиво)

 var aEnumArray = [
            myEnum.first,
            myEnum.second,
            myEnum.third
            ];
        var aEnums = new Array();
        $.each(aEnumArray , function (i, x) {
            aEnums .push({
                id: x,
                name: Converters.rolesToStringConverter(x)
            });
        });

   aEnums.sort(function (x, y) { return (x.name == y.name) ? 0 : (x.name > y.name ? 1 : -1); });
 

Наконец, после всего этого он используется для заполнения

 comboBox.clearItems();
comboBox.addItems(aEnums);
 

Конечно, много работы, чтобы просто заполнить поле со списком.

Комментарии:

1. Для заполнения поля со списком требуется много работы. Во-первых, для сортировки вы можете использовать x.name.localeCompare(y.name) и пропустить избыточную троичную. Во-вторых, я не уверен, в чем смысл создания нескольких массивов из перечисления. В-третьих, если все это скрыто в функциях модуля, действительно ли это имеет значение?

2. ЛОЛ … ты прав насчет того, действительно ли это имеет значение? НО — я просто хочу получить лучшие практики. Спасибо за совет по сортировке.

Ответ №1:

Трудно сказать, чего вы пытаетесь достичь, но из того, что я могу сказать, я думаю, что это может помочь.

http://jsfiddle.net/HBVJu/

 var myEnum = {
  first: 1,
  second: 2,
  third: 3
};
var enumsObj = [];
for(var prop in myEnum){
    enumsObj.push({id: myEnum[prop], name: prop})
}