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

根据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,
    }
]
阅读 6.6k
4 个回答

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

新手上路,请多包涵

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

function filterDel(arr) {
    arr.map((item, index) => {
         if(item.id == '11') {
             arr.splice(index, 1)
         }
         if(item.children) {
            filterDel(item.children)
         }
    })
    return arr
}
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);
// 改变原数组
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题