es6 树形结构为数组格式找到节点删除返回新数组
时间: 2023-08-13 15:07:30 浏览: 90
可以使用递归来遍历整个树形结构数组,找到需要删除的节点,并返回新的数组。具体实现如下:
```javascript
function deleteNodeById(treeArr, id) {
return treeArr.filter((node) => {
if (node.id === id) {
// 如果当前节点的id与目标id相等,则直接返回false,删除该节点
return false;
} else if (node.children) {
// 如果当前节点有子节点,则递归遍历子节点
node.children = deleteNodeById(node.children, id);
}
return true;
});
}
```
以上实现方式会返回一个新的树形结构数组,该数组中已经删除了目标节点。注意,这里假设每个节点都有一个唯一的id属性,可以根据实际情况进行修改。
相关问题
es6 树形结构找到节点删除返回新数组
若要在 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`,表示删除当前节点。否则,如果当前节点有子节点,就递归遍历每个子节点,删除子节点中的要删除的节点,并将不需要删除的子节点加入一个新的子节点数组中。最后,返回一个新的节点对象,包含原节点对象的属性和新的子节点数组。如果当前节点没有子节点或者所有子节点都被删除,子节点数组为空。如果遍历完所有子节点还没有找到节点,就返回当前节点。
es6数组去重
ES6 数组去重可以使用 Set 数据结构来实现,Set 对象允许你存储任何类型的唯一值,这样就可以通过将数组转换为 Set 来达到去重的效果。
具体实现如下:
```
const arr = [1, 2, 3, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]
```
在上述代码中,我们将数组 arr 转换为 Set 对象,然后使用扩展运算符将 Set 对象转换为数组 uniqueArr。由于 Set 对象只会保存不重复的值,因此 uniqueArr 数组中的元素就是不重复的。
阅读全文