Tree节点操作---公用方法

// 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;
            }
        }
    });
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值