如何排序对象列表,如数组

时间:2017-08-29 17:24:15

标签: javascript arrays json sorting timestamp

我有一个JSON对象列表。在每个对象中,都有一个unix时间戳字段,这是我想要排序的字段。所以我写了一个排序函数

function sortUnixTimestamp(a, b){
  var a = parseInt(a.timestamp);
  var b = parseInt(b.timestamp);
  return ((a > b) ? -1 : ((a < b) ? 1 : 0));
}

由于对象不是数组,我尝试了[].sort.call(object).sort(sortUnixTimestamp);但是我不时得到 []。sort.call(...)。sort不是函数

我还试图通过(object).sort(sortUnixTimestamp);来对它进行排序,有时我会得到(...)。排序不是函数

不时,因为它的工作时间是一半。为什么它在某些时候有效但并非总是如此?我该如何解决这个问题?

添加了: 每个对象都是这样的

{
    "field1": "string",
    "field2": "string",
    "timestamp": 0
}

所以列表看起来像

[
    {
      "field1": "string",
      "field2": "string",
      "timestamp": 0
    },
    {
      "field1": "string",
      "field2": "string",
      "timestamp": 0
    },
    ...
]

2 个答案:

答案 0 :(得分:0)

如果您的数据如下:

&#13;
&#13;
var data = [{
  timestamp: 3
}, {
  timestamp: 2
}, {
  timestamp: 1
}];

var result = data.sort((item1, item2) => item1.timestamp - item2.timestamp);

console.log(result);
&#13;
&#13;
&#13;

您可以使用本机数组的排序功能。

答案 1 :(得分:0)

如果您的对象在数组中,您可以按时间戳值对它们进行排序:

var arrayObj = [
  {timestamp: 12},
  {timestamp: 10},
  {timestamp: 2},
  {timestamp: 23}
];

通过调用array.prototype.sort()方法按照下面的timestamp属性对对象数组进行排序:

arrayObj.sort(function (a,b) {
  return a.timestamp - b.timestamp;
});

这应输出:

[ { timestamp: 2 },
{ timestamp: 10 },
{ timestamp: 12 },
{ timestamp: 23 } ]