У меня есть выбранный массив
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 не соответствует ни одному из элементов в этом.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, он вернется и не t go своему брату. Есть предложения по этому поводу?