项目要求实现一个微信朋友圈日期分组的功能:
如上图所示,包括按年分组,同一天的内容分组,支持分页。现在后台返回的数据是经过排序的:
"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循环的嵌套,然后把数据追加到列表里,代码瞬间变的复杂起来,请问各位大佬,一般这样的功能怎么组织数据的结构,或者有什么优雅的方式,比如用递归来实现?
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;}, {})