代码如下(示例):
filterTree(arr, ids,first=true) {if(first){//首次传入深度克隆数据防止修改源数据arr=JSON.parse(JSON.stringify(arr))}let emptyArr = [];for (let item of arr) {if (ids.includes(item.id)) {if (item.children &&Array.isArray(item.children)&& item.children.length > 0) {item.children = filterTree(item.children, ids,false);}emptyArr.push(item);} else if (item.children&&Array.isArray(item.children) && item.children.length > 0) {item.children = this.filterTree(item.children, ids,false);if (item.children.length) {emptyArr.push(item);}}}return emptyArr;
},console.log( filterTree(tree, [3,5,2]));
var tree = [{ text: "Parent 1", id: 1,nodes: [{ text: "Child 1", type: "Child", id: 2,nodes: [{ id: 3,text: "Grandchild 1", type: "Grandchild", nodes: [{id: 4, text: "Grandchild 2", type: "Grandchild" }] ,}, {id: 5, text: "Grandchild 2", type: "Grandchild" },{id: 9, text: "Grandchild 2-9", type: "Grandchild-9" },],}, {id: 6, text: "Child 2", type: "Child" },] ,}, { id: 7,text: "Parent 2", type: "Parent" }, { id: 8,text: "Parent 3", type: "Parent" }
];