我有一个看起来像这样的课程:
class Foo{
id:string;
name:string;
childFooIds: string[];
}
每个Foo都可以通过id存储子Foo,并将所有foos存储在一个对象中:
fooCollection:{
[id:string] : Foo
}
我想编写一个方法来删除fooCollection
中的Foo。我希望以递归方式检查其子foos
及其子foos
等,并将其从我的fooCollection
中移除。关于我如何做到这一点的任何想法?
答案 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',[])
}