js 树状数据怎么删除指定key的节点

发布于 2022-09-13 01:01:10 字数 606 浏览 10 评论 0

根据id 11 删除指定节点,谢谢

[
    {
        id: '1',
        name: 'a',
        pid: '0',
        children: [
            {
                id: '11',
                name: 'a-1',
                pid: '1',
                children: [
                    {
                        id: '111',
                        name: 'a-1-1',
                        pid: '11',
                        children: null
                    }
                    
                ]
            }
        ]
    },
    {
        id: '2',
        name: 'b',
        pid: '0',
        children: null,
    }
]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

小梨窩很甜 2022-09-20 01:01:11

就遍历找就行了,记录父元素,找到了按索引删除就好了。

老街孤人 2022-09-20 01:01:11

递归就行了, 简单写了下:

function filterDel(arr) {
    arr.map((item, index) => {
         if(item.id == '11') {
             arr.splice(index, 1)
         }
         if(item.children) {
            filterDel(item.children)
         }
    })
    return arr
}
—━☆沉默づ 2022-09-20 01:01:11
var data =[
    {
        id: '1',
        name: 'a',
        pid: '0',
        children: [
            {
                id: '11',
                name: 'a-1',
                pid: '1',
                children: [
                    {
                        id: '111',
                        name: 'a-1-1',
                        pid: '11',
                        children: null
                    }
                    
                ]
            }
        ]
    },
    {
        id: '2',
        name: 'b',
        pid: '0',
        children: null,
    }
];
var delTree=(data,id)=> (index = data.findIndex(item=>((flag = item.id==id),(flag ? flag : delTree(item.children||[], id)))),data.splice(index,index==-1 ? 0 : 1),false);
delTree(data,11);
梦醒灬来后我 2022-09-20 01:01:11
// 改变原数组
function deleteNode(arr, targetId) {
    for (let i = 0; i < arr.length; i++) {
        const node = arr[i];

        if (node.id === targetId) {
            arr.splice(i, 1);
            return;
        }

        // 判断children存在并且有数据
        if (Array.isArray(node.children) && node.children.length) {
            return deleteNode(node.children, targetId);
        }
    }
}

deleteNode(a, "11");
console.log(a);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文