一维数组结构成tree型关键是每个一维数字里面必须有一个自己唯一识别的标识(id)和父级唯一识别的表示 (pid)
function oneTotree(data,pid,idKey,pidKey){
let node=[]
pid = pid||"" //这里的值是以哪个pid的值为根节点开始往下找
idKey =idKey||"id"
idKey =pidKey||"pid"
data.forEach(item=>{
if(item[pidKey]===pid){
let node=Object.assign(
{
hidden:true,
alawyShow:true
},item
)
node.path=item.url
node.id=item.id
node.name=item.name
node.children=oneTotree(data,item[idKey],idKey,pidKey)
if(node.children.length===0){
node.isLeaf=true//是否是叶子节点
delete node.children
}
nodes.push(node)
}
})
return nodes
}
tree结构平铺成一维数组结构
const treeToLine = (list) => {
return list.reduce(
(arr, { id, title, parent_id, children = [] }) =>
arr.concat(
[
{
id,
title,
parent_id,
},
],
treeToLine(children)
),
[]
);
};
根据叶子节点查找所有他的父级节点
function getParentId(list, id) {
for (let i in list) {
if (list[i].id == id) {
return [list[i]];
}
if (list[i].children) {
let node = getParentId(list[i].children, id);
if (node !== undefined) {
return node.concat(list[i]);
}
}
}
}