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它有用吗?感谢您现在查看它,尝试一个我开始研究的解决方案,非常类似于您的解决方案。当我让它工作时,将标记为答案