Javascript乱序中的JSON.parse选择

时间:2018-05-17 07:41:57

标签: javascript html arrays json ajax

我从api那里收到了这样的Json:

{
  "paises":{
    "145":"CHINA (53)",
    "150":"ESPAÑA (45)",
    "68":"HOLANDA (38)",
    "236":"RUMANIA (52)"
  }
}

总是alwais的国家/地区列表是按字母顺序排列的,但是当添加到选择列表时显示无序和顺序由id.Like这个:

 "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,因此解析和缩短可能会消耗大量资源。 按字母顺序填充选择保留列表的最佳方法是什么?

非常感谢

2 个答案:

答案 0 :(得分:2)

您可以使用Object.entries将对象转换为数组。使用sort对其进行排序。

注意:orderedDatos现在是一个数组,而不是一个对象。您可能需要更改$.each

上的内容

&#13;
&#13;
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.log(valor[0], valor[1]); //Use valor[0] to get the key | Use valor[1] to get the value
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

文档:Object.entries()sort()

答案 1 :(得分:1)

您可以使用Object.entries()它将返回一个数组,然后您可以使用sort()使用String.localeCompare()方法数组来获取所需的结果。

<强>样本

&#13;
&#13;
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],
  }));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="informe-id"></select>
&#13;
&#13;
&#13;