gpt4 book ai didi

javascript - 从具有父子结构的对象数组中删除对象

转载 作者:行者123 更新时间:2023-12-03 01:13:43 27 4
gpt4 key购买 nike

嘿,我正在使用 PrimeNg UI 框架创建 Angular 应用程序,并发现了一个我无法解决的问题。

假设我有一个对象数组,其中对象具有以下结构(仅供引用,这是 PrimeNg 的 TreeNode,它是数据下的树组件)。

这是单个节点的样子:

{
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我尝试过运行这个。

关于javascript - 从具有父子结构的对象数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com