我有一个选定的数组
this.selectedArray = ["1:Tree", "2:PT", "5:PT - DD", "11:PT - C", "3:SAC", "7:SAC - DR", "6:SAC - DDE"]
和带有孩子的树结构:
this.root =
{"children": [
{"children": [
{
"children": [],
"id": 12,
"name": "PT - D"
},
{
"children": [
{
"children": [],
"id": 8,
"name": "PT-33"
},
{
"children": [],
"id": 10,
"name": "PT-62"
},
{
"children": [],
"id": 9,
"name": "PT-52"
}
],
"id": 4,
"name": "PT - 32"
},
{
"children": [
{
"children": [],
"id": 11,
"name": "PT - C"
}
],
"id": 5,
"name": "PT - DD"
}
],
"id": 2,
"name": "PT"
},
{
"children": [
{
"children": [],
"id": 7,
"name": "SAC - DR"
},
{
"children": [],
"id": 6,
"name": "SAC - DE"
}
],
"id": 3,
"name": "SAC"
}
],
"id": 1,
"name": "Tree"
}
如果node.Id +':'+ node.name与this.selectedArray中的任何项目都不匹配,我想从树中删除该节点。
我在寻找一种算法时遇到麻烦,该算法将允许我删除与从深度嵌套树中选择的this.selected中的任何项都不匹配的所有对象数据。
这里是代码:
setSearchResult(selectedArray) { if (!!selected) { let this.tree = JSON.parse(JSON.stringify(this.root)); this.topLevelGroups = this.removeFromTree(this.tree, selectedArray, null, null); } } removeFromTree(parent, selectedArray, grandParent, idx) { let { name, id, children } = parent; let parentId = id + ':' + name; if (!!selectedArray) { if (!selectedArray.includes(parentId)) { if (grandParent) { grandParent.children.splice(idx, 1); } else return null; } if (!!parent && !!children) { for (let i = 0; i < children.length; i++) { this.removeFromTree(children[i], selectedArray, parent, i); } } } return this.tree.children; }
我认为问题在于执行具有this.slice的代码后,它将返回并且不会进入其兄弟状态。有什么建议吗?
我有一个选定的数组this.selectedArray = [“ 1:Tree”,“ 2:PT”,“ 5:PT-DD”,“ 11:PT-C”,“ 3:SAC”,“ 7:SAC -DR“,” 6:SAC-DDE“]和带有子树的树结构:this.root = {” children“:[{” ...
一个简单的递归过滤器函数,因为您在selectedArray
中使用了字符串,因此可以轻松地使用Set
进行测试一个节点。