使用Underscore sortBy进行对象排序的数组


67

我有这个数组。如何使用下划线'_.sortBy'根据开始日期对其进行排序?

[
    { 
        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' },
    }
]

Answers:


162

使用迭代器函数,而不是单个字符串作为属性:

_.sortBy(arr, function(o) { return o.start.dateTime; })

它以升序给出,但是如何对日期进行降序排序?
罗宾

7
@RobinAT:您只需取消日期时间
Bergi 2014年

16
如果您想执行降序排列,则只需做arr.reverse()
JrBriones 2014年

12
如果您想按日期降序使用,请在下面使用_.sortBy(arr, function(o) { var dt = new Date(o.start.dateTime); return -dt; })
imdadhusen 2014年

4
@imdadhusen:是的,这就是我说“否定日期时间”的意思。但是,该Date对象是多余的,您可以做return -o.start.dateTime;
Bergi 2014年

2

我这样做是这样的:

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。

希望这对某人有帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.