1,初始化树形结构数据
export function InitializationTree(data = []) {
if (!data || !Array.isArray(data)) {
return;
}
for (let i = 0; i < data.length; i++) {
if (data[i].children.length < 1) {
data[i].children = null;
} else {
InitializationTree(data[i].children);
}
}
return data;
}
2,根据id找到当前节点对象
export function TraverseTree(data = [], targetId) {
if (!data || !Array.isArray(data)) {
return;
}
for (let i = 0; i < data.length; i++) {
if (data[i].id === targetId) {
return data[i]
} else if (data[i].children && data[i].children.length > 0) {
let traverseTreeData = TraverseTree(data[i].children, targetId);
if (traverseTreeData) return traverseTreeData
}
}
}
3,根据子节点id找到父节点集合
export function GetTreeNodesParents(treeData = [], targetId) {
let result = [];
let callback = (data = [], targetId) => {
if (!data || !Array.isArray(data)) {
return;
}
for (const i in data) {
if (data[i].id === targetId) {
result.unshift(data[i].id);
callback(treeData, data[i].parentId);
}
if (data[i].children && Array.isArray(data[i].children)) {
callback(data[i].children, targetId);
}
}
};
callback(treeData, targetId);
return result
}
4,过滤不需要的节点,返回新的tree
export function GetFilterTreeNodes(treeData = [], filterKeys = []) {
let result = [];
let callback = (data, nodes) => {
if (!data || !Array.isArray(data) || !Array.isArray(nodes)) {
return;
}
for (let i = 0; i < data.length; i++) {
if (filterKeys.includes(data[i].id)) continue;
const treeNode = {...data[i], children: []};
nodes.push(treeNode);
if (data[i].children && Array.isArray(data[i].children)) {
callback(data[i].children, treeNode.children);
}
}
};
callback(treeData, result);
return result;
}