日常与后端交互中,经常涉及平铺转树,通过子节点找父节点path的问题
直接上代码:
平铺转树形结构数据:
/**
* @description: formatter array to tree.
* @param : arr{Array} tiled arr
* @param : pid{string} parent id
* @return {Array}
* @author: Leo
*/
export function arrToTree(arr, pid = "0") {
const res = [];
arr.forEach((item) => {
if (item.pid === pid) {
const children = arrToTree(
arr.filter((v) => v.pid !== pid),
item.id
);
if (children.length) {
res.push({ ...item, children });
} else {
res.push({ ...item });
}
}
});
return res;
}
树形子节点递归找所有父级id Path Array
/**
* @description: tree childNode find path.
* @param : tree{Array}
* @param : func{Function}
* @param : path{Array}
* @return {Array}
* @author: Leo
*/
export function treeFindPath(tree, func, path = []) {
if (!tree) return [];
for (const data of tree) {
path.push(data.id);
if (func(data)) return path;
if (data.children) {
const findChildren = treeFindPath(data.children, func, path);
if (findChildren.length) return findChildren;
}
path.pop();
}
return [];
}
// 页面调用
treeFindPath( this.organizationIdList, node => node.id === id);