【问题标题】:Array with object sorting with Underscore sortBy使用下划线 sortBy 进行对象排序的数组
【发布时间】:2020-01-09 12:48:34
【问题描述】:

我有这个数组。如何使用下划线'_.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' },
    }
]

【问题讨论】:

    标签: javascript node.js sorting underscore.js


    【解决方案1】:

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

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

    【讨论】:

    • 它以升序排列,但如何按日期降序排列?
    • @RobinAT:你可以简单地否定日期时间
    • 如果你想做降序,那么就做 arr.reverse()
    • 如果你想要日期的降序,那么在下面使用_.sortBy(arr, function(o) { var dt = new Date(o.start.dateTime); return -dt; })
    • @imdadhusen:是的,这就是我说“否定日期时间”时的意思。但是,Date 对象是多余的,您可以这样做 return -o.start.dateTime;
    【解决方案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。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-09
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        相关资源
        最近更新 更多