我有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(它是一个日期)属性对对象进行排序?
答案 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();