JSON.parse в беспорядке Javascript select

Я получаю от 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, поэтому для синтаксического анализа и сокращения может потребоваться много ресурсов. Как лучше всего заполнить список сохранения избранных в алфавитном порядке?

Спасибо большое

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
131
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать 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 (), Сортировать()

Привет! Я получаю эту ошибку: `` jquery.min.js: 2 Uncaught TypeError: Невозможно преобразовать undefined или null в объект в Function.entries (<anonymous>)

pablogupi 17.05.2018 10:21

В какой строке кода вы получаете эту ошибку? Это в браузере, а не на сервере, как node.js, верно? @pablogupi

Eddie 17.05.2018 10:24

В этой строке ошибка var orderedDatos = Object.entries(datos.paises).sort((a, b) => a[0] - b[0]); находится в браузере Chrome, и этот javascript запускается в проекте CakePhp.

pablogupi 17.05.2018 10:29

Вы JSON.parse переменную datos?

Eddie 17.05.2018 10:30

Хорошо, с JSON.parse объект создается, но не печатается в правильном порядке. Первая страна - Голанда, и это должен быть Китай.

pablogupi 17.05.2018 10:42

Разве это не то, что вы пытаетесь сделать? Вы ведь хотите заказать по id? :) @pablogupi

Eddie 17.05.2018 10:45

Нет, я хочу заказать по названию страны

pablogupi 17.05.2018 10:47

Рад помочь :)

Eddie 17.05.2018 10:55

Вы можете использовать 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>

Другие вопросы по теме