Javascript 删除递归对象项
我有一个类似这样的类:Javascript 删除递归对象项,javascript,typescript,Javascript,Typescript,我有一个类似这样的类: class Foo{ id:string; name:string; childFooIds: string[]; } 每个Foo都可以按id存储子Foo,我将所有Foo存储在一个对象中: fooCollection:{ [id:string] : Foo } 我想写一个方法,从我的fooCollection中删除一个Foo。我想递归地检查它的子对象foos,以及它们的子对象foos等,并将它们从我的fooColl
class Foo{
id:string;
name:string;
childFooIds: string[];
}
每个Foo都可以按id存储子Foo,我将所有Foo存储在一个对象中:
fooCollection:{
[id:string] : Foo
}
我想写一个方法,从我的
fooCollection
中删除一个Foo。我想递归地检查它的子对象foos
,以及它们的子对象foos
等,并将它们从我的fooCollection
中删除。有什么想法吗?如果我是对的,fooCollection会是这样的
var fooCollection = {
'1': new Foo('1','abc1',['3','4']),
'2': new Foo('2','abc2',['6','7']),
'3': new Foo('3','abc3',[]),
'4': new Foo('4','abc4',['8']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[]),
'8': new Foo('8','abc8',[]),
}
{
'2': new Foo('2','abc2',['6','7']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[])
}
方法从fooCollection递归删除fooId
function removeFoo(fooId){
var fooObj = fooCollection[fooId];
if(fooObj){
for(var i = 0; i < fooObj.childFooIds.length;i++){
removeFoo(fooObj.childFooIds[i]);
}
delete fooCollection[fooId];
}
}
现在fooCollection应该是这样的
var fooCollection = {
'1': new Foo('1','abc1',['3','4']),
'2': new Foo('2','abc2',['6','7']),
'3': new Foo('3','abc3',[]),
'4': new Foo('4','abc4',['8']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[]),
'8': new Foo('8','abc8',[]),
}
{
'2': new Foo('2','abc2',['6','7']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[])
}
如果我是对的,fooCollection将是这样的
var fooCollection = {
'1': new Foo('1','abc1',['3','4']),
'2': new Foo('2','abc2',['6','7']),
'3': new Foo('3','abc3',[]),
'4': new Foo('4','abc4',['8']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[]),
'8': new Foo('8','abc8',[]),
}
{
'2': new Foo('2','abc2',['6','7']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[])
}
方法从fooCollection递归删除fooId
function removeFoo(fooId){
var fooObj = fooCollection[fooId];
if(fooObj){
for(var i = 0; i < fooObj.childFooIds.length;i++){
removeFoo(fooObj.childFooIds[i]);
}
delete fooCollection[fooId];
}
}
现在fooCollection应该是这样的
var fooCollection = {
'1': new Foo('1','abc1',['3','4']),
'2': new Foo('2','abc2',['6','7']),
'3': new Foo('3','abc3',[]),
'4': new Foo('4','abc4',['8']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[]),
'8': new Foo('8','abc8',[]),
}
{
'2': new Foo('2','abc2',['6','7']),
'5': new Foo('5','abc5',[]),
'6': new Foo('6','abc6',[]),
'7': new Foo('7','abc7',[])
}
请分享您的尝试。请提供示例Payloads您在哪里被卡住?一个delete方法就可以做到这一点吗?
当我删除一个foo时
——你不清楚这是什么意思。从哪里删除?是否从客户端的内存中删除?是否通过API调用进行删除,并希望更新客户端内存中的对象?更具体一点。更新我的问题更具体一点。请分享您的尝试。请提供示例Payloads您在哪里被卡住了?一个delete方法就可以做到这一点吗?当我删除一个foo时
——你不清楚这是什么意思。从哪里删除?是否从客户端的内存中删除?是否通过API调用进行删除,并希望更新客户端内存中的对象?更具体一点。更新我的问题,使之更准确specific@Alek它有用吗?感谢您现在查看它,尝试一个我开始研究的解决方案,非常类似于您的解决方案。当我得到答案时,我会记下来working@Alek它有用吗?感谢您现在查看它,尝试一个我开始研究的解决方案,非常类似于您的解决方案。当我让它工作时,将标记为答案