我有一堂课,看起来像这样:

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',[]),
}


递归地从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];
  }
}


叫它

removeFoo('1');


现在fooCollection应该看起来像这样

{
 '2': new Foo('2','abc2',['6','7']),
 '5': new Foo('5','abc5',[]),
 '6': new Foo('6','abc6',[]),
 '7': new Foo('7','abc7',[])
}

09-17 01:43