#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:
Трудно сказать, чего вы пытаетесь достичь, но из того, что я могу сказать, я думаю, что это может помочь.
var myEnum = {
first: 1,
second: 2,
third: 3
};
var enumsObj = [];
for(var prop in myEnum){
enumsObj.push({id: myEnum[prop], name: prop})
}