// Tree (增删改查)
// 根据key给children添加数据
export function addTreeNode(data: any, key: string, keyName: string, addData: any) {
data.forEach((item: any) => {
if (item[keyName] === key) {
item.children.push(addData);
} else if (item.children) {
addTreeNode(item.children, key, keyName, addData);
}
});
}
// 根据key清空children数据
export function childEmpty(data: any, key: string, keyName: string) {
data.forEach((item: any) => {
if (item[keyName] === key) {
item.children = [];
} else if (item.children) {
childEmpty(item.children, key, keyName);
}
});
}
// 查找父节点
export function findParent(data: any[], id: string, childKey: string) {
for (let index = 0; index < data.length; index++) {
const e = data[index];
if (e[childKey] && e[childKey].some((child: any) => child.id === id)) {
return e
}
if (e.children) {
const children: any = findParent(e[childKey], id, childKey)
if (children) {
return children;
}
}
}
return null;
}
// 删除树节点
export function removeTreeNode(
data: any,
id: string,
childKey: string,
returnRemoveNode: boolean = false
) {
const newData = cloneDeep(data);
const parent = findParent(newData, id, childKey);
if (returnRemoveNode) {
return parent[childKey].filter((e: any) => e.id == id);
}
parent[childKey] = parent[childKey].filter((e: any) => e.id != id);
return newData;
}
// 更新树节点
export function updateTreeNode(tree: any, id: string, childKey: string, newData: any) {
tree.forEach((e: any, index: number) => {
if (e.id == id) {
tree[index] = { ...e, ...newData };
return true;
}
if (e[childKey]) {
const ok: any = updateTreeNode(e[childKey], id, childKey, newData);
if (ok) {
return ok;
}
}
});
}
Tree节点操作---公用方法
于 2023-08-11 17:43:52 首次发布