猿问

下面的js怎么写,求教?

原数据格式letobj=[{1:'20190805',2:'1',3:'success'},{1:'20191120',2:'1.1',3:'success'},{1:'20190212',2:'1.1.1',3:'success'},{1:'20190212',2:'1.1.2',3:'success'},{1:'20190212',2:'1.1.3',3:'success'},{1:'20190212',2:'1.2',3:'success'},{1:'20190212',2:'1.2.1',3:'success'},{1:'20190212',2:'2',3:'success'},{1:'20190212',2:'2.1',3:'success'},{1:'20190212',2:'2.2.1',3:'success'},{1:'20190212',2:'2.2',3:'success'},{1:'20190212',2:'2.3',3:'success'},{1:'20190212',2:'2.3.1',3:'success'},...]最后想要下面这种结果格式,请问该怎么实现呢letdata=[{1:'20190805',2:'1',3:'success',children:[{1:'20191120',2:'1.1',3:'success',children:[{1:'20190212',2:'1.1.1',3:'success'},{1:'20190212',2:'1.1.2',3:'success'},{1:'20190212',2:'1.1.3',3:'success'},]},{1:'20191120',2:'1.2',3:'success',children:[{1:'20190212',2:'1.2.1',3:'success'},]}]},{1:'20190212',2:'2',3:'success',children:[{1:'20190212',2:'2.1',3:'success',children:[{1:'20190212',2:'2.2.1',3:'success'},]},{1:'20190212',2:'2.2',3:'success'},{1:'20190212',2:'2.3',3:'success',children:[{1:'20190212',2:'2.3.1',3:'success'}]}]},...]
鸿蒙传说
浏览 272回答 2
2回答

潇湘沐

/****@param{Array}source*@returns{Array}分类好的数据*/functionmark(source){vartemp={};source.forEach(item=>{temp[item["2"]]=item;});source.forEach(item=>{varkey=item["2"],parent;//子级if(key.length>1){//子级的父idkey=key.slice(0,-2);parent=temp[key];if(parent){parent.children=parent.children||[];parent.children.push(item);}}});returnObject.keys(temp).reduce((ret,key)=>ret.concat(key.length===1?temp[key]:[]),[]);}

翻阅古今

1楼的代码有点局限性,稍微整改了一下:/*@paramspermission需要整合的数据(不一定有序)@return[]*///匹配父级的正则constREG_CODE=/^(.+)\.\d+$/;consthandlePermission=permission=>{//数据备份,防止污染原数据permission=permission.map(item=>Object.assign({},item));//对数据进行排序permission.sort((a,b)=>a[2]-b[2]);//将每一条数据都当做父级letparents=permission.reduce((data,item)=>(data[item[2]]=item,data),{});//返回结果letres=[];//查找每一条数据对应的父级permission.forEach(item=>{//获取父级codeletparentCode=REG_CODE.exec(item[2]);//不存在父级,则是顶级父类if(!parentCode){res.push(item);return;}//如果存在父级,则挂载到父级的children中if(parentCode&&parents[parentCode[1]]){parents[parentCode[1]].children=parents[parentCode[1]].children||[];parents[parentCode[1]].children.push(item);}});returnres;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答