根据日期对JavaScript对象数组进行排序

时间:2016-07-11 10:59:06

标签: javascript json sorting

我有json文件:

var Point = [{

"id": 1,
"name": "A",
"LastUpdate": "2016-07-08",
"position": [36.8479648, 10.2793332]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-07",
"position":[ 36.8791039, 10.2656209]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-09",
"position": [36.9922751, 10.1255164]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-10",
"position": [36.9009882, 10.3009531]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-04",
"position": [37.2732415, 9.8713665]}];

如何仅使用JavaScript按升序和降序按 LastUpdate(它是一个日期)属性对对象进行排序?

6 个答案:

答案 0 :(得分:3)

试试这个

Point.sort(function(a, b) {
  return (new Date(b.LastUpdate)) - (new Date(a.LastUpdate))
})

DEMO

答案 1 :(得分:1)

由于您的日期格式为YYYY-MM-DD(年份,后跟月份,后跟日期),您只需使用字符串' localeCompare()方法将它们作为字符串进行比较。

然后,您只需将其添加到自定义排序功能中,如下所述:



var Points = [{

"id": 1,
"name": "A",
"LastUpdate": "2016-07-08",
"position": [36.8479648, 10.2793332]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-07",
"position":[ 36.8791039, 10.2656209]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-09",
"position": [36.9922751, 10.1255164]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-10",
"position": [36.9009882, 10.3009531]},{
"id": 1,
"name": "A",
"LastUpdate": "2016-07-04",
"position": [37.2732415, 9.8713665]}];

Points.sort(function(a, b){
  return a.LastUpdate.localeCompare( b.LastUpdate );
});

console.log( Points );




答案 2 :(得分:1)

由于字符串是ISO格式,因此可以通过直接字符串比较对它们进行排序,因此无需在不同类型的对象中进行转换。

正如Nina在评论中指出的那样,chrome对大于10的数组使用不同的排序算法,因此在所有基准测试之后,排序的最佳方法将是

性能第一(平均每个任务0.011690500000258907)

Point.sort(function(a,b) {
return (a.LastUpdate > b.LastUpdate) ? 1 : ((b.LastUpdate > a.LastUpdate) ?-1:0);
});

比 性能第二(平均每个任务0.029657999999879395)

Point.sort(function(a, b) {
  return a.LastUpdate.localeCompare( b.LastUpdate );
})

性能第三(每个任务的平均毫秒数0.03225850000019418)

Point.sort(function(a, b) {
  return (new Date(b.LastUpdate)) - (new Date(a.LastUpdate))
})

答案 3 :(得分:0)

您可以将sort函数与比较函数一起使用。

Point.sort(function(a, b) {
    var aSplit = a.LastUpdate.split("-"),
        aDate = new Date(aSplit[2], aSplit[1], aSplit[0]),
        bSplit = b.LastUpdate.split("-"),
        bDate = new Date(bSplit [2], bSplit [1], bSplit [0]);

    return aDate - bDate;
});

答案 4 :(得分:0)

使用Array.sort(带有ES6“箭头”功能)和Date.parse功能的简单解决方案:

// ascending order
Point.sort((a, b) => Date.parse(a.LastUpdate) - Date.parse(b.LastUpdate));

答案 5 :(得分:0)

升序和降序:

ascPoint = Point.sort((a,b) => Date.parse(a.LastUpdate) -Date.parse(b.LastUpdate));
descPoint = ascPoint.reverse();