Использование подчеркивания для сортировки коллекции на основе даты

У меня есть базовая коллекция, у которой есть куча моделей с атрибутами даты, связанными с ними. Я хочу отсортировать их по их датам. Итак, самые последние даты и т.д. Каков наилучший способ обойти это.

Даты форматируются следующим образом: базовый объект даты. Дата {Пн Мар 05 2012 23:30:00 GMT-0500 (EST)}

Спасибо

Ответ 1

У вас есть объекты Date, поэтому вы можете использовать getTime, чтобы преобразовать их в числа, а затем отменить эти числа, чтобы получить самые последние даты первый. Если вы хотите, чтобы ваша коллекция отсортировалась, сравните ее следующим образом:

C = Backbone.Collection.extend({
    //...
    comparator: function(m) {
        return -m.get('date').getTime();
    }
});

сделает трюк. Демо (откройте консоль): http://jsfiddle.net/ambiguous/htcyh/

Коллекции backbone также включают в себя Underscore sortBy, поэтому вы можете сделать одноразовый сорт:

var sorted = c.sortBy(function(m) { return -m.get('date').getTime() });

Демо: http://jsfiddle.net/ambiguous/FF5FP/

Или вы можете использовать toArray, чтобы получить обычный массив JavaScript и использовать стандартный sort без использования 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;
});

Демо: http://jsfiddle.net/ambiguous/QRmJ4/

Ответ 2

Если у вас есть строки с информацией о дате, вы можете...

C = Backbone.Collection.extend({
///...
    comparator: function(m) {
        return -Date.parse(m.get('datestring'));
    }
});