zoukankan      html  css  js  c++  java
  • 将包含时间戳的对象数组按天排序

    问题描述

    示例对象数组如下,每个对象中都有一个时间戳,现在要求将每个对象按照其中的时间戳对应的天数进行排列,如何实现?

    需求分析

    示例代码如下:

    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'
                }
            ]
        }
        ];
    
  • 相关阅读:
    MySQL之ORM
    MySQL之索引补充
    MySQL存储过程
    c primer plus 7编程练习
    c语言中统计单词数目程序
    c语言统计输入字符数及行数
    c语言中getchar()、putchar()函数例子
    c primer plus 6编程练习
    c语言 %c 一次输出多个字符 (特殊程序)
    c语言 复合赋值运算符的优先级低于算术运算符
  • 原文地址:https://www.cnblogs.com/lvonve/p/12049499.html
Copyright © 2011-2022 走看看