Здравствуйте, я рекурсивно перечисляю tree
значения, и хотя некоторые nodes
в дереве undefined
, я установил охрану, чтобы он не вышел из строя. Даже когда map
-ing children
узлы я получаю ошибку:
Выход с ошибкой
Adrian has children:Marian,Dan,
Dan is leaf
Marian has children:Liviu,Farcas,
t.ngfactory.js?
[sm]:1 ERROR TypeError: Cannot read property 'logRecursive' of undefined
at push../src/app/pages/tree-view/treeview.component.ts.TreeViewComponent.logRecursive (tree-view.component.ts:29)
at Array.map (<anonymous>)
at TreeViewComponent.push../src/app/pages/tree-view/tree-view.component.ts.TreeViewComponent.logRecursive (tree-view.component.ts:29)
at TreeViewComponent.push../src/app/pages/tree-view/tree-view.component.ts.TreeViewComponent.ngOnInit (tree-view.component.ts:37)
at checkAndUpdateDirectiveInline (core.js:18537)
at checkAndUpdateNodeInline (core.js:19801)
at checkAndUpdateNode (core.js:19763)
at debugCheckAndUpdateNode (core.js:20397)
at debugCheckDirectivesFn (core.js:20357)
at Object.eval [as updateDirectives] (TreeViewComponent_Host.ngfactory.js? [sm]:1)
Код
public logRecursive(model:TreeModel):number{
if(model==null || model ==undefined){
console.log("null");
return 0;
}
if(model.children ==undefined || model.children.length==0 ){
console.log(`${model.id} is leaf`);
return 1;
}
console.log(`${model.id} has children:${model.children.reduce((x,y)=>y.id+","+x,"")}`);
var result= model.children.map(this.logRecursive).reduce((x,y)=>x+y);
return result;
}
Модель
export interface TreeModel{
id:string;
children:Array<TreeModel>;
}
PS Я перепробовал все возможные комбинации защиты для children
, являющегося null
, undefined
или обычным length==0
и все еще ононе работает на первом уровне. Не работает на втором уровне (children of 'Marian')
Вход
let a:TreeModel={
id:"Adrian",
children:[
{id:"Dan",children:[]},
{id:"Marian",children:[ //fails when mapping his children...
{id:"Farcas",children:[]},
{id:"Liviu",children:[]}
]}
]
};
Вызов logRecursive(a);