2012-04-19 17 views
5

Tôi có một mảng đối tượng có thuộc tính chuỗi 'ngày'. ví dụ:Sắp xếp theo ngày với underscore.js hoặc chỉ đơn giản 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' 
    } 
] 

Tôi chỉ muốn chuyển đổi chuỗi sang ngày và sắp xếp chúng theo STARTDATE DESC. Có thể ai đó xin vui lòng cho tôi biết làm thế nào để làm điều này với teh underscore.js _sortBy phương pháp hoặc thậm chí chỉ đơn giản javascript sẽ làm.

Cảm ơn!

Trả lời

4

forEachsort nên xử lý điều đó cho bạn:

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; Kiểm tra giao diện điều khiển của bạn.

15

giải pháp một gạch dưới có thể nhìn như thế này:

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(); 

Bạn không cần phải sử dụng tên các chức năng của khóa học nhưng những cái tên làm làm cho logic một chút rõ ràng hơn.

Demo: http://jsfiddle.net/ambiguous/qe9sZ/

Trong đồng bằng JavaScript bạn có thể làm điều đó như thế này:

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; 
}); 

Demo: http://jsfiddle.net/ambiguous/rPAPG/

0

tôi đã làm nó theo cách này:

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

Nếu bạn muốn nó giảm dần thì cũng giống như vậy nhưng * -1

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

Trong ví dụ này tôi sắp xếp theo hai trường, bạn có thể quên mục item.batchId.

Hy vọng điều này sẽ giúp ai đó.

Các vấn đề liên quan