node.js - 按值对 JSON 对象进行排序 [重复]

Posted

技术标签:

【中文标题】node.js - 按值对 JSON 对象进行排序 [重复]【英文标题】:node.js - Sort JSON objects by a value [duplicate] 【发布时间】:2018-02-18 00:06:28 【问题描述】:

我的服务器上有这个 JSON 文件:

"1504929411112":"name":"user1","score":"10","1504929416574":"name":"2nduser","score":"14","1504929754610":"name":"usr3","score":"99","1504929762722":"name":"userfour","score":"40","1504929772310":"name":"user5","score":"7"

假设我已经解析了这个文件:

var json = JSON.parse(getJSONFile());

我现在如何通过score 属性对json 变量中的每个对象进行排序? 因为json 不是数组,所以数组排序函数都不适合我。

【问题讨论】:

对象属性没有任何顺序,因此如果您希望对数据进行排序,您将创建一个数组。 @MattGregory 怎么样? 【参考方案1】:

由于这些是对象的属性,它们的顺序通常是未知的并且无法保证。要按某些内部属性对它们进行排序,您首先必须将 Object 更改为 Array,例如:

const json = JSON.parse(getJsonFile());

const jsonAsArray = Object.keys(json).map(function (key) 
  return json[key];
)
.sort(function (itemA, itemB) 
  return itemA.score < itemB.score;
);

更多信息,请参见:

https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Array/sort

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

【讨论】:

它们会自动按它们的键排序这并不完全正确。最好只说“他们的订单未定义”。【参考方案2】:
var ob =  "fff":  "name": "user1", "score": "10" , "bbbb":  "name": "user4", "score": "14" , "dddd":  "name": "user2", "score": "99" , "cccc":  "name": "user5", "score": "40" , "aaaa":  "name": "user3", "score": "7"  ;


Object.keys(ob).map(key => ( key: key, value: ob[key] )).sort((first, second) => (first.value.name < second.value.name) ? -1 : (first.value.name > second.value.name) ? 1 : 0 ).forEach((sortedData) => console.log(JSON.stringify(sortedData)));

【讨论】:

最好使用localeCompare

以上是关于node.js - 按值对 JSON 对象进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

按值对 JSON 进行排序

按值对 JSON 进行排序 [重复]

如何在PHP中按值对对象数组进行排序

我有不同的类,我想用这些类中的对象制作一个向量并按值对其进行排序

Firebase 按值对类数组进行排序

如何按值对 STL 映射进行排序?