3 回答

TA貢獻1757條經驗 獲得超8個贊
這應該可以完成工作:
function filter(tree, list){
let output = [];
for(i in tree){
if(list.indexOf(tree[i].label) >= 0){
tree[i].children = filter(tree[i].children, list);
output.push(tree[i]);
}else{
output = output.concat(filter(tree[i].children, list));
}
}
return output;
}

TA貢獻1863條經驗 獲得超2個贊
我這樣解決了這個問題:
function deleteNodes(tree, list) {
if (tree.length > 0) {
tree.forEach((node, i) => {
this.deleteNodes(node.subItems, list);
if (node.subItems) {
if (node.subItems.length === 0 && !list.includes(node.text))
{
tree.splice(i, 1);
}
}
});
}
}

TA貢獻1886條經驗 獲得超2個贊
const prunedNode = node => {
const pruned = whitelist.includes(node.label) ? node : null;
if (pruned) {
node.children = node.children.reduce((prunedChildren, child) => {
const prunedChildNode = prunedNode(child);
if (prunedChildNode) {
prunedChildren.push(prunedChildNode);
}
return prunedChildren;
}, []);
}
return pruned;
};
console.log(prunedNode(tree));
添加回答
舉報