猿问

怎么对一组数据按照某个特定字段进行分组?

比如我有一组数据
[
{
'time':'2018-03-01',
'data':1,
},
{
'time':'2018-02-02',
'data':2,
},
{
'time':'2018-01-01',
'data':3,
},
{
'time':'2017-12-01',
'data':4,
},
{
'time':'2017-11-02',
'data':5,
},
{
'time':'2016-10-01',
'data':6,
},
{
'time':'2016-9-01',
'data':7,
}
]
实际业务场景是对这组数据进行分组,每5条一组但是这5条还要根据他们的日期年份分小组
比如上面这7条分出来结果就是:
[
{
section:1,
sectionDatas:[
{
date:'2018',
datas:[
{
'time':'2018-03-01',
'data':1,
},
{
'time':'2018-02-02',
'data':2,
},
{
'time':'2018-01-01',
'data':3,
}
]
},
{
date:'2017',
datas:[
{
'time':'2017-12-01',
'data':4,
},
{
'time':'2017-11-02',
'data':5,
}
]
}
]
},
{
section:2,
sectionDatas:[
{
date:'2016',
datas:[
{
'time':'2016-10-01',
'data':6,
},
{
'time':'2016-9-01',
'data':7,
}
]
}
]
}
]
这个算法该怎么写呢。。求指教
收到一只叮咚
浏览 324回答 2
2回答

波斯汪

步骤*第一步:排序,时间从近到远*第二步:分割,将数组分成5个一组,返回新数组*第三步:抽离,将相同时间抽离出来组成要求上的数据格式代码第一步:排序varcompare=function(prop){returnfunction(obj1,obj2){varval1=obj1[prop];varval2=obj2[prop];if(!isNaN(Number(val1))&&!isNaN(Number(val2))){val1=Number(val1);val2=Number(val2);}if(val1val2){return-1;}else{return0;}}}//用法arr.sort(compare("time"))第二步:分割//分割Array.prototype.chunk=function(size){vararray=this;constlength=array.lengthif(!length||!size||size

慕森王

vararr=newObjectdata.forEach(function(d){varyear=newDate(d.time).getFullYear()if(arr[year]){arr[year].push(d)}else{arr[year]=[d]}})提供个思路,修改一下应该能用
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答