【问题标题】:node.js - Sort JSON objects by a value [duplicate]node.js - 按值对 JSON 对象进行排序 [重复]
【发布时间】: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 怎么样?

标签: javascript json node.js


【解决方案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
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 2014-07-09
  • 2021-09-16
  • 1970-01-01
  • 2014-01-25
  • 2016-09-21
相关资源
最近更新 更多