將包含時間戳的對象數組按天排序

問題描述

示例對象數組如下,每個對象中都有一個時間戳,現在要求將每個對象按照其中的時間戳對應的天數進行排列,如何實現?

需求分析

示例代碼如下:

var list = [
    {
        time: 1525681075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁'
    },
    {
        time: 1555581075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁dadasdasdadasdasdsdas'
    },
    {
        time: 1565681075426,
        curURL:
            'http://www.baidu.com?dsadasdasjfodfjsodifuosdfuosdfjuosdfi',
        title: '百度首頁1'
    }
    {
        time: 1544681075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁哈哈哈哈哈哈哈哈哈哈哈'
    },
    
    
];

1、數組排序

首先,需要先將上面的對象數組按照時間戳有小到大排好序。排序函數:

let list = list.sort(function(a, b) {
    return a.time - b.time;
});

排好序的對象數組如下:

var list = [
    {
        time: 1525681075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁'
    },
    {
        time: 1544681075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁哈哈哈哈哈哈哈哈哈哈哈'
    },
    {
        time: 1555581075426,
        curURL: 'http://www.baidu.com',
        title: '百度首頁dadasdasdadasdasdsdas'
    },
    {
        time: 1565681075426,
        curURL:
            'http://www.baidu.com?dsadasdasjfodfjsodifuosdfuosdfjuosdfi',
        title: '百度首頁1'
    }
];

2、封裝函數

首先將第一個時間戳轉化成日期,然後循環遍歷後面的時間戳,對比日期是否相同,由於時間戳都是按照從小到大的順序排列的,所以比較新時間戳的時候,只需要與排好的日期的最後一個日期進行對比,如果在最後一個日期以內就加到這個時間戳對應的日期數組中去去,如果不在就往後面日期排,以此類推。

代碼如下:

formatDate(sortedDateList) {
    var arr = [];
    sortedDateList.forEach(function(item, i) {
        var tmpDate = new Date(item.time);
        var day = tmpDate.getDate();
        var month = tmpDate.getMonth() + 1;
        var year = tmpDate.getFullYear();
        
        // 首先取第一個時間戳(也是最小的時間戳)
        if (i === 0) {
            var tmpObj = {};
            tmpObj.date = year + '-' + month + '-' + day; // 時間戳對應的日期
            tmpObj.dataList = [];  // 存儲相同時間戳日期的數組
            tmpObj.dataList.push(item);
            arr.push(tmpObj);
        } else {
            // 判斷兩個時間戳對應的日期是否相等,相等就加進去,不相等就另開闢新的時間戳日期
            if (arr[arr.length - 1]['date'] === year + '-' + month + '-' + day) {
                arr[arr.length - 1]['dataList'].push(item);
            } else {
                var tmpObj = {};
                tmpObj.date = year + '-' + month + '-' + day;
                tmpObj.dataList = [];
                tmpObj.dataList.push(item);
                arr.push(tmpObj);
            }
        }
    });
    return arr;
}

轉化之後的結構如下:

let recordList =  [
    {
        date: '2018-12-5',
        dataList: [
            {
                time: 1525681075426,
                curURL: 'http://www.baidu.com',
                title: '百度首頁'
            },
            {
                time: 1524681075426,
                curURL: 'http://www.baidu.com',
                title: '百度首頁哈哈哈哈哈哈哈哈哈哈哈'
            },
            {
                time: 1525581075426,
                curURL: 'http://www.baidu.com',
                title: '百度首頁dadasdasdadasdasdsdas'
            }
        ]
    },
    {
        date: '2019-8-13',
        dataList: [
            {
                time: 1545681075426,
                curURL:
                    'http://www.baidu.com?dsadasdasjfodfjsodifuosdfuosdfjuosdfi',
                title: '百度首頁1'
            }
        ]
    }
    ];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章