添加树形同级结构

const tree = [
    {
        key: '1',
        title: '1',
        children: [
            {
                key: '1-1',
                title: '1-1',
                children: []
            },
            {
                key: '1-2',
                title: '1-2',
                children: []
            },
        ]
    },
    {
        key: '2',
        title: '2',
        children: [
            {
                key: '2-1',
                title: '2-1',
                children: []
            },
            {
                key: '2-2',
                title: '2-2',
                children: [
                    {
                        key: '2-2-1',
                        title: '2-2-1',
                        children: []
                    }
                ]
            },
        ]
    }
];
// copy一个新树
const copyTree = (node) => {
    if (node && node.length) {
        return node.map(item => ({
            title: item.title,
            key: item.key,
            children: copyTree(item.children)
        }))
    } else {
        return;
    }
};

// 寻找父节点
const findParentNode = (key, node) => {
    if (!node) {
        return null;
    }
    if (node.children) {
        let children = node.children;
        for (let i = 0; i < children.length; i++) {
            if (children[i].key === key) {
                return node;
            } else {
                const res = findParentNode(key, children[i]);
                if (res) {
                    return res;
                }
            }
        }
    }
    return null;
}
// 添加同级结构
const addSameLevel = (key,node) =>{
    let nakeTree = {children:copyTree(tree)};
    let parentNode = findParentNode('2-1', nakeTree);
    if(!parentNode.children) {
        parentNode.children = [];
    }
    parentNode.children.push({
        title:'add',
        key:'add',
        children:[]
    })
    return nakeTree.children;
}

console.log(addSameLevel('2-1',tree));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值