Я получаю от api Json вот так:
{
"paises":{
"145":"CHINA (53)",
"150":"ESPAÑA (45)",
"68":"HOLANDA (38)",
"236":"RUMANIA (52)"
}
}
Список стран всегда отображается в алфавитном порядке, но при добавлении в список выбора отображается в беспорядке и в порядке по идентификатору.
"68":"HOLANDA (38)",
"145":"CHINA (53)",
"150":"ESPAÑA (45)",
"236":"RUMANIA (52)"
Это код:
var datos = JSON.parse(data);
$.each(datos.paises, function(id, valor) {
$("#informe-id").append($('<option>', {
value: id,
text: valor,
}));
});
В моем проекте у меня есть эта проблема в большем количестве отборов. В другом случае размер списка больше 200, поэтому для синтаксического анализа и сокращения может потребоваться много ресурсов. Как лучше всего заполнить список сохранения избранных в алфавитном порядке?
Спасибо большое



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Object.entries для преобразования объекта в массив. Используйте sort, чтобы отсортировать его.
Примечание: orderedDatos теперь будет массивом, а не объектом. Возможно, вам придется что-то изменить на вашем $.each
var data = '{"paises": {"145": "CHINA (53)","150": "ESPAÑA (45)","68": "HOLANDA (38)","236": "RUMANIA (52)"}}';
var datos = JSON.parse(data);
var orderedDatos = Object.entries(datos.paises).sort((a, b) => a[1].localeCompare(b[1]));
$.each(orderedDatos, function(id, valor) {
console.info(valor[0], valor[1]); //Use valor[0] to get the key | Use valor[1] to get the value
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Док: Object.entries (), Сортировать()
В какой строке кода вы получаете эту ошибку? Это в браузере, а не на сервере, как node.js, верно? @pablogupi
В этой строке ошибка var orderedDatos = Object.entries(datos.paises).sort((a, b) => a[0] - b[0]); находится в браузере Chrome, и этот javascript запускается в проекте CakePhp.
Вы JSON.parse переменную datos?
Хорошо, с JSON.parse объект создается, но не печатается в правильном порядке. Первая страна - Голанда, и это должен быть Китай.
Разве это не то, что вы пытаетесь сделать? Вы ведь хотите заказать по id? :) @pablogupi
Нет, я хочу заказать по названию страны
Рад помочь :)
Вы можете использовать Object.entries(), он вернет массив, тогда вы можете использовать массив метода sort(), используя String.localeCompare(), чтобы получить требуемый результат.
ДЕМО
var datos = {
"paises": {
"145": "CHINA (53)",
"150": "ESPAÑA (45)",
"68": "HOLANDA (38)",
"236": "RUMANIA (52)"
}
};
let paises = Object.entries(datos.paises).sort((a,b)=>a[1].localeCompare(b[1]));
$.each(paises, function(index, value) {
$("#informe-id").append($('<option>', {
value: value[0],
text: value[1],
}));
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id = "informe-id"></select>
Привет! Я получаю эту ошибку: `` jquery.min.js: 2 Uncaught TypeError: Невозможно преобразовать undefined или null в объект в Function.entries (<anonymous>)