嘿,我正在使用PrimeNg UI Framework创建一个Angular应用程序,并发现了一个我无法解决的问题。
假设我有一个对象数组,其中对象具有以下结构(Fyi这是PrimeNg的TreeNode,它是Data下的Tree Component)。
这是单个节点的样子:
{
label?: string;
expandedIcon?: any;
collapsedIcon?: any;
children?: TreeNode[];
parent?: TreeNode;
id?: number;
}
如您所见,有一个父子关系正在进行中。
我的数组看起来像这样:
[
{ Id: 1,
label: "Books",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: [
{
Id: 2,
label: "Horror",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: [{
Id: 3,
label: "Stephen King",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: null,
parent: undefiend
}],
parent: {label: "Books", expandedIcon: "fa fa-folder-open"...}
}
];
parent: undefined;
},
{...}
]
现在出现了我的问题:在我的应用程序中,用户可以选择其中一个对象,父对象或子对象(它看起来像Windows资源管理器结构)。如果选择我想删除此对象。
我的问题是如何在我的数组中找到这个选定的对象?
假设所选节点如下。
{
label: "Stephen King",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: null,
parent: undefiend
}
如何在我的数组中找到此对象并将其删除?过滤器可以是标签或Id。
您可以使用递归函数执行此操作
function removeSelectedNode(){
p.forEach((parent)=>{
deleteFromTree(parent, p)
})
}
function deleteFromTree(obj, parent){
console.log("rechived", obj)
if(obj.Id==selectedNode.Id){
console.log("found", obj)
var index = parent.findIndex((o)=> o.Id == obj.Id)
parent.splice(index,1);
return;
}
if(obj.children && obj.children.length>0){
obj.children.forEach((child)=>{
deleteFromTree(child, obj.children);
})
}
}
在函数中用你的实际数组替换p并在我尝试运行它的地方设置selectedNode。