2013-03-06 32 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