Как заказать словарь по значению в AngularJS - PullRequest
0 голосов
/ 25 мая 2018

У меня есть REST API, который возвращает список локалей в виде словаря:

{
"en-uk": "English UK",
"en-us": "English USA",
...
}

Этот словарь правильно упорядочен по алфавиту по значению.

Когда AngularJS получает его по HTTP,Словарь автоматически пересортируется по ключу, поэтому, когда я связываюсь с элементом выбора, список опций упорядочивается по ключу, а алфавитный порядок по ключу не совпадает с порядком по значению, я получаю неправильную сортировку.

Проблема, которую я предполагаю, связана с тем, что такой словарь становится в основном одним объектом с более чем 800 свойствами.Как мне отсортировать его по значению?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Вы можете изменить способ отправки ответа с сервера.Вместо отправки ответа в виде объекта отправьте строковый объект.

0 голосов
/ 25 мая 2018

Проблема действительно в том, что вы не можете отсортировать значения свойств объекта.Поэтому я преобразую его в массив перед привязкой:

Итак,

languageResource.getCultures().then(function(cultures) {   
       vm.availableCultures = cultures;
});

становится

languageResource.getCultures().then(function (culturesDictionary) {
                        var cultures = [];
                        angular.forEach(culturesDictionary, function (value, key) {
                            cultures.push({
                                lcid: key,
                                name: value
                            });
                        });
                        vm.availableCultures = cultures;
                    });
0 голосов
/ 25 мая 2018

Первый: Вы должны найти все ключи.

Секунда: Итерация всех ключей.

Третья: Затем сортировка массива по значениям.

Пожалуйста, используйте следующее:

let obj = {
"en-us": "English USA",
"en-uk": "English UK"
};

// Get an array of the keys:
let keys = Object.keys(obj);

// Then sort by using the keys to lookup the values in the original object:
keys.sort(function(a, b) { return obj[a] > obj[b] });

console.log(keys);
console.log(obj[keys[0]]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...