jquery - 在 jQuery 中对 JSON.parse 列表进行排序的最简单方法

标签 jquery sorting

我有一个像这样的列表(它已经在 php 中正确排序)

myList = {  
   "394":"Andres",
   "388":"Franck",
   "380":"John",
   "415":"Philip"
}

但是,如果我使用 data = JSON.parse(myList) 为下拉列表创建一个对象,作为响应,我会得到按我实际上不想要的键自动排序的列表。

结果:

data = {
   "380":"John",
   "388":"Franck",
   "394":"Andres",
   "415":"Philip"
}

那么,将列表作为 JSON 对象进行排序以获取按值排序的列表的最佳方法是什么?

我已经尝试过:

var keyList = Object.keys(data).sort(function(a,b){return data[a]-data[b]});
   var valueLIst = Object.values(data).sort(function(a,b){return data[a]-data[b]});

   var obj = {};
   for(var i=0,len=keyList.length; i < len ;i++) {
     obj[keyList[i]] = valueLIst[i];
   }

最佳答案

理想情况下,您的 PHP API 应该返回一个数组,因为 JavaScript 对象是 unordered collection of properties根据定义。

4.3.3 Object

An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method.

但是,如果您想保持 PHP 响应现在的样子,您可以将 API 响应转换为有序的对象数组:

Object.keys(data).map(key => ({ id: key, value: data[key] }))
                 .sort((a, b) => a.value.localeCompare(b.value));

有趣的是,您还可以使用 Map 根据插入顺序进行排序。

关于jquery - 在 jQuery 中对 JSON.parse 列表进行排序的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456269/

相关文章:

jquery - 将 jQuery 点击目标记录为字符串以便存储和重用

jquery - 做一个容器显示:none when the content of <a> is empty

javascript - 使用变量时无效的 JSON 原语

Java HashMap 先按值再按键排序

algorithm - 比较计数算法的伪代码

javascript - chrome 使 div 元素的小方 block 在调整大小时不可见

php - 按另一个预定义的、非详尽的数字数组对数字数组进行排序,然后升序排序

Javascript : natural sort of alphanumerical strings

c - 在c中将单词按字母顺序排序

javascript - 谷歌地图无法绘制