js两个树型结构做过滤
时间: 2024-11-09 22:31:00 浏览: 8
程序天下:JavaScript实例自学手册
在JavaScript中,过滤树状数据通常涉及到遍历每个节点并应用某种条件来决定是否保留该节点及其子节点。这可以使用递归函数来完成,例如使用深度优先搜索(DFS)或广度优先搜索(BFS)。这里有一个简单的示例,假设我们有两个树形结构,`treeA`和`treeB`,都是对象数组,代表了层次结构,我们可以编写一个函数来过滤掉`treeA`中在`treeB`中不存在的节点:
```javascript
function filterTree(treeA, treeB) {
function traverse(node, target) {
if (!node || !target[node.id]) return false;
delete target[node.id];
for (const child of node.children) {
if (!traverse(child, target)) return false;
}
return true;
}
const result = {};
for (const node of treeA) {
if (traverse(node, treeB)) {
result[node.id] = node; // 或者复制节点内容,根据需求
}
}
return result;
}
// 示例用法
const treeA = [{ id: '1', children: [ { id: '2' }, { id: '3' } ] }];
const treeB = [{ id: '1' }, { id: '4' }];
const filteredTree = filterTree(treeA, treeB);
```
在这个例子中,`traverse`函数会检查当前节点是否存在于目标树(`treeB`)中,并递归地处理其子节点。如果所有子节点都匹配,则返回`true`,表示整个分支应该保留在结果中。
阅读全文