数组数据转成树节点数据

46 阅读1分钟
/*
    1.数据按照父节点id排序,注意有些父节点的id格式不规范,不规范要先整理格式
    2.遍历整理后的数据,利用对象浅拷贝的特性,如果当前parentid存在map中,就更新map里对应id的children,会同步更新treedata,并且在map中加入一条新的数据,防止有链式数据
                                          如果当前parentid不存在map中,就向map中加入一条新的数据,并且将这条数据加入treedata中,
*/
const toTree = ()=>{
  const str = arr.sort((a,b)=>a.parentId-b.parentId);
  const map=  new Map();
  const treeData =[];
  let obj;

  for(let i= 0;i<str.length;i++){
    if(map.has(str[i].parentId)){
      if(!map.get(str[i].parentId).children)map.get(str[i].parentId).children =[];
      const a= new Object(str[i])
      map.get(str[i].parentId).children.push(a);
      map.set(str[i].id,a)
    }else{
      obj= new Object(str[i])
      treeData.push(obj)
      map.set(str[i].id,obj)
    }
  }
  return treeData
}