2013-03-06 98 views
0

我有一个数组中的对象。这些对象有一个'时间'属性,它是一个日期字符串。ES5排序()和日期

items = [ 
    {time: "2013-03-01T10:46:11Z"}, 
    {time: "2013-03-03T10:46:11Z"}, 
    {time: "2013-03-02T10:46:11Z"} 
] 

我希望通过'时间'属性对数组进行排序。

我读过Sort Javascript Object Array By DateJavascript Date Sorting,但我似乎无法使这些解决方案中的任何一种(转换为Date objets或按字符串排序)工作。

我的排序功能:

items.sort(function(first, second){ 
    return new Date(first.time) < new Date(second.time) ? 1 : -1; 
}) 

测试结果:

items.forEach(function(item){ 
    console.log(item.time) 
}) 

返回:

2013-03-01T10:46:11Z 
2013-03-03T10:46:11Z 
2013-03-02T10:46:11Z 

3月1日,3月3日,3月2日我在做什么错?

+1

可这些日子,简单的字符串,如果他们所有的“Z”日期(世界时)进行排序。 – Pointy 2013-03-06 17:13:10

回答

1

您在比较器函数中调用字段“date”而不是“time”。此外,函数应该返回一个整数,而不是布尔值:

return new Date(first.time) - new Date(second.time); 

这可能不适用于所有浏览器。如果你所有的时间均为世界时,只需将它们的比较结果为字符串:

return first.time > second.time ? 1 : first.time === second.time ? 0 : -1; 
+0

感谢您的回答。我修复了演示以使用一致的名称(并且每个Array.sort()文档返回-1)。编辑:我看到问题解决了。 – mikemaccana 2013-03-06 17:17:27

+0

@nailer不按照这个演示:http://jsfiddle.net/barney/uVgm4/ – Barney 2013-03-06 17:18:10