Bạn có ngày đối tượng, do đó bạn có thể sử dụng getTime
để chuyển đổi chúng sang số và sau đó phủ nhận những con số để nhận được nhiều nhất -những ngày đầu tiên. Nếu bạn muốn giữ bộ sưu tập của mình được sắp xếp thì một bộ so sánh như sau:
C = Backbone.Collection.extend({
//...
comparator: function(m) {
return -m.get('date').getTime();
}
});
sẽ thực hiện thủ thuật. Demo (mở giao diện điều khiển của bạn xin vui lòng): http://jsfiddle.net/ambiguous/htcyh/
bộ sưu tập Backbone cũng include gạch của sortBy
vì vậy bạn có thể làm một loại một lần:
var sorted = c.sortBy(function(m) { return -m.get('date').getTime() });
Demo: http://jsfiddle.net/ambiguous/FF5FP/
Hoặc bạn có thể sử dụng toArray
để có được một mảng JavaScript bình thường và sử dụng tiêu chuẩn sort
mà không cần sử dụng getTime
:
var sorted = c.toArray().sort(function(a, b) {
a = a.get('date');
b = b.get('date');
if(a > b)
return -1;
if(a < b)
return 1;
return 0;
});
Demo: http://jsfiddle.net/ambiguous/QRmJ4/
Nguồn
2012-03-02 22:19:52
Tôi thích phương pháp so sánh rất sạch sẽ và đơn giản. Một câu hỏi mà tôi có là có cách để đảo ngược. Vì vậy, ngày càng gần đến ngày hiện tại sẽ là ngày đầu tiên và không phải là ngày cuối cùng như nó đang sử dụng như sau. so sánh: hàm (m) { trả về m.get ('date'). getTime(); } – Chapsterj
Tôi chỉ nhận ra rằng ngày của tôi không phải là một đối tượng ngày tháng nhưng là một giá trị của 201203051400 vì vậy tôi đoán đó là nguyên nhân gây ra vấn đề. Có cách nào để đối phó với giá trị chuỗi và vẫn sử dụng cùng một thiết lập hoặc nó sẽ là tốt hơn để biến giá trị thành một đối tượng ngày đầu tiên và sau đó làm phương pháp so sánh. – Chapsterj
@Chapsterj: Nếu bạn có các đối tượng Date thì bạn có thể xem 'your_date - new Date' hoặc' new Date - your_date' khi thích hợp. Nếu ngày của bạn là chuỗi ISO-8601-ish thì bạn có thể chuyển đổi chúng thành Ngày tháng trong hàm so sánh hoặc bạn (IMHO tốt hơn) chuyển đổi chúng thành Đối tượng ngày khi bạn tải và phân tích dữ liệu của mình. –