2012-04-19 65 views
5

我有一個具有'日期'字符串屬性的對象數組。 即:用underscore.js按日期排序或只是普通的JS

[ 
    { 
     id: 1, 
     startDate: '2011-4-22' 
    }, 
    { 
     id: 2, 
     startDate: '2012-3-15' 
    }, 
    { 
     id: 3, 
     startDate: '2011-4-22' 
    }, 
    { 
     id: 4, 
     startDate: '2012-2-10' 
    } 
] 

我只想通過的startDate DESC的日期字符串轉換爲日期和排序。有人可以告訴我如何使用underscore.js _sortBy方法來做到這一點,甚至只是簡單的JavaScript就可以做到。

謝謝!

回答

4

forEachsort應該處理給你:

var data = [ 
    { 
     id: 1, 
     startDate: '2011-4-22' 
    }, 
    { 
     id: 2, 
     startDate: '2012-3-15' 
    }, 
    { 
     id: 3, 
     startDate: '2011-4-22' 
    }, 
    { 
     id: 4, 
     startDate: '2012-2-10' 
    } 
]; 

var i, c; 

for(i = 0; c = data[i]; i++) { 
    var parts = c.startDate.split('-'); 

    c.startDate = new Date(+parts[0], +parts[1] - 1, +parts[2]); 
} 

data.sort(function(a, b) { 
    return b.startDate - a.startDate; 
}); 

Here's a demo;檢查你的控制檯。

15

下劃線的解決辦法是這樣的:

a = [ /* ... */ ]; 

function to_date(o) { 
    var parts = o.startDate.split('-'); 
    o.startDate = new Date(parts[0], parts[1] - 1, parts[2]); 
    return o; 
} 
function desc_start_time(o) { 
    return -o.startDate.getTime(); 
} 
var b = _.chain(a) 
     .map(to_date) 
     .sortBy(desc_start_time) 
     .value(); 

您不必使用過程中的命名功能,但名稱做製作邏輯更清楚一點。

演示:http://jsfiddle.net/ambiguous/qe9sZ/

在普通的JavaScript,你可以做這樣的:

for(var i = 0, parts; i < a.length; ++i) { 
    parts = a[i].startDate.split('-'); 
    a[i].startDate = new Date(parts[0], parts[1] - 1, parts[2]); 
} 
var b = a.sort(function(a, b) { 
    return b.startDate - a.startDate; 
}); 

演示:http://jsfiddle.net/ambiguous/rPAPG/

0

我就是這麼做的:

var sorted = _(list).sortBy(
        function (item) {       
         return [new Date(item.effectiveDate).getTime(), item.batchId]; 
        }), "batchId"); 

如果您想要下降,那麼它是一樣的事情,但* -1

var sorted = _(list).sortBy(
        function (item) {       
         return [new Date(item.effectiveDate).getTime()*-1, item.batchId]; 
        }), "batchId"); 

在這個例子中,我按兩個字段排序,可以忘記item.batchId。

希望這可以幫助別人。