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 对象进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章