前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将包含时间戳的对象数组按天排序

将包含时间戳的对象数组按天排序

作者头像
Daotin
发布2019-12-18 17:43:37
3.8K0
发布2019-12-18 17:43:37
举报

问题描述

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

需求分析

示例代码如下:

代码语言:javascript
复制
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、数组排序

首先,需要先将上面的对象数组按照时间戳有小到大排好序。排序函数:

代码语言:javascript
复制
let list = list.sort(function(a, b) {
    return a.time - b.time;
});

排好序的对象数组如下:

代码语言:javascript
复制
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、封装函数

首先将第一个时间戳转化成日期,然后循环遍历后面的时间戳,对比日期是否相同,由于时间戳都是按照从小到大的顺序排列的,所以比较新时间戳的时候,只需要与排好的日期的最后一个日期进行对比,如果在最后一个日期以内就加到这个时间戳对应的日期数组中去去,如果不在就往后面日期排,以此类推。

代码如下:

代码语言:javascript
复制
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;
}

转化之后的结构如下:

代码语言:javascript
复制
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'
            }
        ]
    }
    ];
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 需求分析
    • 1、数组排序
      • 2、封装函数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档