簡體   English   中英

如何按日期對對象數組進行排序?

[英]How to sort an array of objects by date?

我正在嘗試使用包含以下內容的每個對象對對象數組進行排序:

var recent = [{id: "123",age :12,start: "10/17/13 13:07"} , {id: "13",age :62,start: "07/30/13 16:30"}];

日期格式為: mm/dd/yy hh:mm

我想按照最近的第一個日期順序排序。 如果日期相同,則應按時間部分排序。

我嘗試了下面的sort()函數,但它不起作用:

recent.sort(function(a,b))
{
    a = new Date(a.start);
    b = new Date(b.start);
    return a-b;
});

另外我應該如何迭代對象進行排序? 就像是:

for (var i = 0; i < recent.length; i++)
    {
        recent[i].start.sort(function (a, b)
        {
            a = new Date(a.start);
            b = new Date(b.start);
            return a-b; 
        } );
    }

數組中可以有任意數量的對象。

正如在評論中指出的那樣,最近的定義是不正確的javascript。

但假設日期是字符串:

var recent = [
    {id: 123,age :12,start: "10/17/13 13:07"}, 
    {id: 13,age :62,start: "07/30/13 16:30"}
];

然后像這樣排序:

recent.sort(function(a,b) { 
    return new Date(a.start).getTime() - new Date(b.start).getTime() 
});

有關W3Schools排序功能的更多細節

recent.sort(function(a,b) { return new Date(a.start).getTime() - new Date(b.start).getTime() } );

此功能允許您創建一個比較器,該比較器將路徑指向您要比較的鍵:

 function createDateComparator ( path = [] , comparator = (a, b) => a.getTime() - b.getTime()) { return (a, b) => { let _a = a let _b = b for(let key of path) { _a = _a[key] _b = _b[key] } return comparator(_a, _b) } } const input = ( [ { foo: new Date(2017, 0, 1) } , { foo: new Date(2018, 0, 1) } , { foo: new Date(2016, 0, 1) } ] ) const result = input.sort(createDateComparator([ 'foo' ])) console.info(result) 

ES6:

recent.sort((a,b)=> new Date(b.start).getTime()-new Date(a.start).getTime());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM