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'
                }
            ]
        }
        ];
    
  • 相关阅读:
    idea设置全局ignore
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please ins
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistr
    kafka 删除 topic
    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    Centos中使用yum安装java时,没有jps的问题的解决
    Spring 整合Junit
    Spring纯注解配置
    Spring 基于注解的 IOC 配置
    打印java系统的信息
  • 原文地址:https://www.cnblogs.com/lvonve/p/12049499.html
Copyright © 2011-2022 走看看