对日期进行分组有什么高效方法吗?

项目要求实现一个微信朋友圈日期分组的功能:
图片描述

如上图所示,包括按年分组,同一天的内容分组,支持分页。现在后台返回的数据是经过排序的:

"data":[
    {
        "title":"测试1",
        "content":"测试1",
        "createTime":"2018-10-01 10:21:31"
    },
    {
        "title":"测试2",
        "content":"测试2",
        "createTime":"2018-9-01 10:21:31"
    },
    {
        "title":"测试3",
        "content":"测试3",
        "createTime":"2018-9-01 10:11:31"
    },
    {
        "title":"测试说说4",
        "content":"测试说说4",
        "createTime":"2017-10-01 10:21:31"
    },
    {
        "title":"测试5",
        "content":"测试5",
        "createTime":"2017-10-01 10:10:10"
    },
    {
        "title":"测试6",
        "content":"测试6",
        "createTime":"2016-10-01 10:21:31"
    }]

我现在的想法是将数据整理成如下格式:

    {
        "2018":{
            "10-1":[{"title":"测试1","content":"测试1"}],
            "9-1"[{"title":"测试2","content":"测试2"},{"title":"测试3","content":"测试3"}]
        },
        "2017":{
            "10-1":[]
        }
    }

接着遍历这个对象,结果在写代码的时候发现要写超过三个for循环的嵌套,然后把数据追加到列表里,代码瞬间变的复杂起来,请问各位大佬,一般这样的功能怎么组织数据的结构,或者有什么优雅的方式,比如用递归来实现?

阅读 2.2k
1 个回答

data.reduce((a,b)=>{var [,year,date] = /(\d+)\-(\d+\-\d+)/.exec(b.createTime);a[year] = a[year] || {};a[year][date] = a[year][date] || [];a[year][date].push(b);return a;}, {})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题