拉莫斯之舞
先来个函数注释 :/**
*将有父子关系的一维数组转换成树形结构(多维)数据
*console.log(JSON.stringify(setTreeData(data),null,2));
*============================================
*@param{*Array}data需要遍历的一维数组
*/再来具体的代码 :functionfnSetTreeData(data){vardata=[...data];vartree=data.filter((father)=>{varbranchArr=data.filter((child)=>{if(father.id==child.parentId)child._hasParent=true;returnfather.id==child.parentId;//MARK为什么这样写就报错?
//if(father.id==child.parentId)child._hasParent=true;
//returnchild._hasParent
});if(branchArr.length>0)father.children=branchArr;return!father._hasParent;
});//MARK为什么在这里还得加一个过滤
tree=tree.filter((item)=>{return!item._hasParent;
})returntree
}console.log(JSON.stringify(fnSetTreeData(data),null,2));至于怎么解决循环引用的问题, 先用sort给数组排序后, 再在每次filter中计数++如何 ?得给一个测试数据 :vardata=[
{id:40,parentId:31,note:"的萨达是"},
{id:20,parentId:11,note:"的萨达是"},
{id:22,parentId:20,note:"dsadas"},
{id:12,parentId:null,note:"dsadasad萨达s"},
{id:11,parentId:undefined,note:"dqwds"},
{id:24,parentId:22,note:"搜索"},
{id:34,parentId:22,note:"搜索"}
];