原数据格式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'}]}]},...]
2 回答

潇湘沐
TA贡献1816条经验 获得超6个赞
/****@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]:[]),[]);}

翻阅古今
TA贡献1780条经验 获得超5个赞
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;}
添加回答
举报
0/150
提交
取消