步驟*第一步:排序,時間從近到遠*第二步:分割,將數(shù)組分成5個一組,返回新數(shù)組*第三步:抽離,將相同時間抽離出來組成要求上的數(shù)據格式代碼第一步:排序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.lengthif(!length||!size||size<1){return[]}letindex=0letresIndex=0letresult=newArray(Math.ceil(length/size))while(indexresult[resIndex++]=array.slice(index,(index+=size))}returnresult}//用法arr.chunk(5)第三步:抽離//抽離functionsortArr(arr,str){var_arr=[],_t=[],//臨時的變量_tmp;//按照特定的參數(shù)將數(shù)組排序將具有相同值得排在一起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()}//將相同類別的對象添加到統(tǒng)一個數(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]];}}//將最后的內容推出新數(shù)組_arr.push(_t);return_arr;}//用法,這里僅對一維數(shù)組使用sortArr(arr,'time')//我將數(shù)據一二步處理后開始二叉數(shù)循環(huán)varcc=arr.sort(compare("time")).chunk(5)var_cc=[]for(leti=0;i//抽離var_datas=sortArr(cc[i],'time')//根據所給數(shù)據結構進行賦值_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ù)式編程功力不夠,謹慎使用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ù)組的長度,如果你傳入的不是數(shù)組,那么獲取到的就是undefinedconstlength=array.length//判斷不是數(shù)組,或者size沒有設置,size小于1,就返回空數(shù)組if(!length||!size||size<1){return[]}//核心部分letindex=0//用來表示切割元素的范圍startletresIndex=0//用來遞增表示輸出數(shù)組的下標//根據length和size算出輸出數(shù)組的長度,并且創(chuàng)建它。letresult=newArray(Math.ceil(length/size))//進行循環(huán)while(index//循環(huán)過程中設置result[0]和result[1]的值。該值根據array.slice切割得到。result[resIndex++]=array.slice(index,(index+=size))}//輸出新數(shù)組//returnresultreturnthis.map(result)}//抽離sortArr(arr,str){var_arr=[],_t=[],//臨時的變量_tmp;//按照特定的參數(shù)將數(shù)組排序將具有相同值得排在一起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()}//將相同類別的對象添加到統(tǒng)一個數(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]];}}//將最后的內容推出新數(shù)組_arr.push(_t);return_arr;}//轉指定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()//返回一個新的值,不改變原來數(shù)據