第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

怎么對(duì)一組數(shù)據(jù)按照某個(gè)特定字段進(jìn)行分組?

怎么對(duì)一組數(shù)據(jù)按照某個(gè)特定字段進(jìn)行分組?

收到一只叮咚 2019-05-13 13:41:48
比如我有一組數(shù)據(jù)[{'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,}]實(shí)際業(yè)務(wù)場(chǎng)景是對(duì)這組數(shù)據(jù)進(jìn)行分組,每5條一組但是這5條還要根據(jù)他們的日期年份分小組比如上面這7條分出來結(jié)果就是:[{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,}]}]}]這個(gè)算法該怎么寫呢。。求指教
查看完整描述

2 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

步驟
*第一步:排序,時(shí)間從近到遠(yuǎn)*第二步:分割,將數(shù)組分成5個(gè)一組,返回新數(shù)組*第三步:抽離,將相同時(shí)間抽離出來組成要求上的數(shù)據(jù)格式
代碼
第一步:排序
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(val1return1;
}elseif(val1>val2){
return-1;
}else{
return0;
}
}
}
//用法
arr.sort(compare("time"))
第二步:分割
//分割
Array.prototype.chunk=function(size){
vararray=this;
constlength=array.length
if(!length||!size||size<1){
return[]
}
letindex=0
letresIndex=0
letresult=newArray(Math.ceil(length/size))
while(indexresult[resIndex++]=array.slice(index,(index+=size))
}
returnresult
}
//用法
arr.chunk(5)
第三步:抽離
//抽離
functionsortArr(arr,str){
var_arr=[],
_t=[],
//臨時(shí)的變量
_tmp;
//按照特定的參數(shù)將數(shù)組排序?qū)⒕哂邢嗤档门旁谝黄?pre>arr=arr.sort(function(a,b){
vars=a[str],
t=b[str];
returns});
if(arr.length){
//_tmp=arr[0][str];
_tmp=newDate(arr[0][str]).getFullYear()
}
//將相同類別的對(duì)象添加到統(tǒng)一個(gè)數(shù)組
for(leti=0;iif(newDate(arr[i][str]).getFullYear()===_tmp){
//if(arr[i][str]===_tmp){
_t.push(arr[i]);
}else{
_tmp=newDate(arr[i][str]).getFullYear();
_arr.push(_t);
_t=[arr[i]];
}
}
//將最后的內(nèi)容推出新數(shù)組
_arr.push(_t);
return_arr;
}
//用法,這里僅對(duì)一維數(shù)組使用
sortArr(arr,'time')
//我將數(shù)據(jù)一二步處理后開始二叉數(shù)循環(huán)
varcc=arr.sort(compare("time")).chunk(5)
var_cc=[]
for(leti=0;i//抽離
var_datas=sortArr(cc[i],'time')
//根據(jù)所給數(shù)據(jù)結(jié)構(gòu)進(jìn)行賦值
_cc.push({section:i+1,sectionDatas:[]})
for(leto=0;o<_datas.length;o++){
_cc[i].sectionDatas.push({
data:newDate(_datas[o][0].time).getFullYear(),
datas:[]
})
}
for(letp=0;p<_cc[i].sectionDatas.length;p++){
_cc[i].sectionDatas[p].datas=sortArr(cc[i],'time')[p]
}
}
最近剛研究的函數(shù)式編程
功力不夠,謹(jǐn)慎使用
classFunctor{
constructor(data){
this.data=data
}
map(data){
returnnewFunctor(data)
}
//排序
compare(prop){
varresult=this.data.sort(function(obj1,obj2){
varval1=obj1[prop];
varval2=obj2[prop];
if(!isNaN(Number(val1))&&!isNaN(Number(val2))){
val1=Number(val1);
val2=Number(val2);
}
if(val1return1;
}elseif(val1>val2){
return-1;
}else{
return0;
}
})
returnthis.map(result)
}
//分割
chunk(size){
vararray=this.data;
//獲取數(shù)組的長(zhǎng)度,如果你傳入的不是數(shù)組,那么獲取到的就是undefined
constlength=array.length
//判斷不是數(shù)組,或者size沒有設(shè)置,size小于1,就返回空數(shù)組
if(!length||!size||size<1){
return[]
}
//核心部分
letindex=0//用來表示切割元素的范圍start
letresIndex=0//用來遞增表示輸出數(shù)組的下標(biāo)
//根據(jù)length和size算出輸出數(shù)組的長(zhǎng)度,并且創(chuàng)建它。
letresult=newArray(Math.ceil(length/size))
//進(jìn)行循環(huán)
while(index//循環(huán)過程中設(shè)置result[0]和result[1]的值。該值根據(jù)array.slice切割得到。
result[resIndex++]=array.slice(index,(index+=size))
}
//輸出新數(shù)組
//returnresult
returnthis.map(result)
}
//抽離
sortArr(arr,str){
var_arr=[],
_t=[],
//臨時(shí)的變量
_tmp;
//按照特定的參數(shù)將數(shù)組排序?qū)⒕哂邢嗤档门旁谝黄?pre>arr=arr.sort(function(a,b){
vars=a[str],
t=b[str];
returns});
if(arr.length){
//_tmp=arr[0][str];
_tmp=newDate(arr[0][str]).getFullYear()
}
//將相同類別的對(duì)象添加到統(tǒng)一個(gè)數(shù)組
for(leti=0;iif(newDate(arr[i][str]).getFullYear()===_tmp){
//if(arr[i][str]===_tmp){
_t.push(arr[i]);
}else{
_tmp=newDate(arr[i][str]).getFullYear();
_arr.push(_t);
_t=[arr[i]];
}
}
//將最后的內(nèi)容推出新數(shù)組
_arr.push(_t);
return_arr;
}
//轉(zhuǎn)指定json格式
dataToJSON(){
var_json=[]
var_this=this;
this.data.forEach(function(item,i){
var_datas=_this.sortArr(item,'time')
_json.push({section:i+1,sectionDatas:[]})
for(leto=0;o<_datas.length;o++){
_json[i].sectionDatas.push({
data:newDate(_datas[o][0].time).getFullYear(),
datas:[]
})
}
for(letp=0;p<_json[i].sectionDatas.length;p++){
_json[i].sectionDatas[p].datas=_datas[p]
}
})
return_json
}
}
Functor.of=function(data){
returnnewFunctor(data)
}
使用方法
Functor.of(a).compare("time").chunk(5).dataToJSON()//返回一個(gè)新的值,不改變?cè)瓉頂?shù)據(jù)
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-13
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

vararr=newObject
data.forEach(function(d){
varyear=newDate(d.time).getFullYear()
if(arr[year]){
arr[year].push(d)
}else{
arr[year]=[d]
}
})
提供個(gè)思路,修改一下應(yīng)該能用
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-13
  • 2 回答
  • 0 關(guān)注
  • 335 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)