70

I have this array. How do I use underscore '_.sortBy' to sort it according to start date?

[
    { 
        id: 'oljw832021kjnb389xzll323jk',
        start: { dateTime: '2013-09-26T13:30:00-07:00' },
        end: { dateTime: '2013-09-26T14:30:00-07:00' },
    },
    { 
        id: 'ed7l5tmckdp0lm90nvr4is3d4c',
        start: { dateTime: '2013-09-26T15:30:00-07:00' },
        end: { dateTime: '2013-09-26T16:30:00-07:00' },
    },
    { 
        id: 'etmasdsackdp0kjl0nvrkopioqw',
        start: { dateTime: '2013-09-26T18:00:00-07:00' },
        end: { dateTime: '2013-09-26T19:00:00-07:00' },
    }
]
Thaddeus Albers
  • 4,094
  • 5
  • 32
  • 42
Jack Dre
  • 1,026
  • 2
  • 9
  • 15

3 Answers3

169

Use an iterator function, not a single string for a property:

_.sortBy(arr, function(o) { return o.start.dateTime; })
Bergi
  • 630,263
  • 148
  • 957
  • 1,375
2

I did it this way:

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

If you want it descending then it's the same thing but *-1

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

In this example I am ordering by two fields, you can forget about the item.batchId.

Hope this helps someone.

Sanchitos
  • 8,423
  • 6
  • 52
  • 52
1

var sortedItem = _.sortBy(yourArrayName, ["start"])