es6 树形结构找到节点删除返回新数组
时间: 2023-08-13 10:06:28 浏览: 98
搜索树形节点
若要在 ES6 的树形结构中删除一个节点并返回新的树形结构数组,可以使用递归来实现:
```javascript
function deleteNode(tree, nodeId) {
if (tree.id === nodeId) {
// 找到节点,删除它
return null;
} else if (tree.children) {
// 如果当前节点有子节点,遍历子节点
const newChildren = [];
for (let i = 0; i < tree.children.length; i++) {
const newChild = deleteNode(tree.children[i], nodeId);
if (newChild) {
// 如果子节点不是要删除的节点,加入新的子节点数组中
newChildren.push(newChild);
}
}
// 返回新的节点对象,如果当前节点没有子节点或者所有子节点都被删除,子节点数组为空
return Object.assign({}, tree, { children: newChildren });
}
// 没有找到节点,返回当前节点
return tree;
}
// 示例树形结构
const tree = {
id: 1,
children: [
{
id: 2,
children: [
{ id: 4 },
{ id: 5 }
]
},
{
id: 3,
children: [
{ id: 6 },
{ id: 7 }
]
}
]
};
// 删除 id 为 5 的节点
const newTree = deleteNode(tree, 5);
console.log(newTree); // 输出 { id: 1, children: [ { id: 2, children: [ { id: 4 } ] }, { id: 3, children: [ { id: 6 }, { id: 7 } ] } ] }
```
在上面的代码中,`deleteNode` 函数接受两个参数:树形结构和要删除的节点的 ID。如果当前节点的 ID 等于要删除的 ID,就返回 `null`,表示删除当前节点。否则,如果当前节点有子节点,就递归遍历每个子节点,删除子节点中的要删除的节点,并将不需要删除的子节点加入一个新的子节点数组中。最后,返回一个新的节点对象,包含原节点对象的属性和新的子节点数组。如果当前节点没有子节点或者所有子节点都被删除,子节点数组为空。如果遍历完所有子节点还没有找到节点,就返回当前节点。
阅读全文