js的Object也是引用对象,同理可用idMap、parentMap构建树的关系。
listData2TreeData2(listData,param) {//将list数据转化为tree数据
if(!param)param={};
if(!param.id)param.id='id';
if(!param.parentid)param.parentid='parentid';
if(!param.children)param.children='children';
if(!param.rootParentIsZero)param.rootParentIsZero=false;
let idMap={};//key为id,value为item
let parentMap={};//key为parentid,value为list数组
listData.forEach(item => {
idMap[item[param.id]] = item;
if(!parentMap[item[param.parentid]]){
parentMap[item[param.parentid]]=[];
}
parentMap[item[param.parentid]].push(item);
});
let childSet=[];
for (let key in parentMap) {
if(idMap[key]){
idMap[key][param.children]=parentMap[key];
childSet.push(parentMap[key].forEach(child=>child[param.id]));
}
}
let result=[];
for(let id in idMap){
if(childSet.indexOf(id)<0){
let node=idMap[id];
if(!param.rootParentIsZero||!node[param.parentid]||node[param.parentid]==0){
result.push(node);
}
}
}
return result;
},