使用Underscore中的sortBy函数对包含对象的数组进行排序

70

我有一个数组。我该如何使用下划线的“_.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' },
    }
]
3个回答

169

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

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

它以升序给出,但如何按日期降序排序? - Robin
7
@RobinAT:您可以简单地否定日期时间。 - Bergi
16
如果您想进行降序排列,只需执行 arr.reverse()。 - JrBriones
12
如果您希望按日期降序排列,请使用以下内容:_.sortBy(arr, function(o) { var dt = new Date(o.start.dateTime); return -dt; }) - imdadhusen
4
是的,当我说“negate the datetime”时,这就是我的意思。不过,那个Date对象是多余的,你可以直接写成return -o.start.dateTime; - Bergi
显示剩余2条评论

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。希望这能帮到某些人。

1

变量sortedItem通过_.sortBy函数对yourArrayName数组按照"start"属性进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接