删除递归对象条目

时间:2018-02-04 02:40:26

标签: javascript typescript

我有一个看起来像这样的课程:

class Foo{

    id:string;

    name:string;        

    childFooIds: string[];
}

每个Foo都可以通过id存储子Foo,并将所有foos存储在一个对象中:

fooCollection:{
    [id:string] : Foo
}

我想编写一个方法来删除fooCollection中的Foo。我希望以递归方式检查其子foos及其子foos等,并将其从我的fooCollection中移除。关于我如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:3)

如果我是正确的,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',[])
}