为了账号安全,请及时绑定邮箱和手机立即绑定

下面的js怎么写,求教?

下面的js怎么写,求教?

鸿蒙传说 2019-06-12 08:53:26
原数据格式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){
//子级的父id
key=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]:[]),[]);
}
                            
查看完整回答
反对 回复 2019-06-12
?
翻阅古今

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=>{
//获取父级code
letparentCode=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;
}
                            
查看完整回答
反对 回复 2019-06-12
  • 2 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号