我有一个树的对象
var data = [
{
id: 'topNode',
parameter: 'parameter',
children: [
{
id: 'node1',
parameter: 'parameter',
children: [
{
id: 'randomNode_1',
parameter: 'parameter'
}],
{
id: 'node2',
parameter: 'parameter'
children: [
{
id: 'randomNode_2',
parameter: 'parameter'
},
{
id: 'randomNode_3',
parameter: 'parameter'
}
]
}
]
}];
如何在树上搜索特定节点,然后返回该节点?
我写了一个方法:
findProposedValueById(idToFind: string, rootNode: TreeNode): TreeNode {
if (rootNode.getId() === idToFind) {
return rootNode;
} else {
for (const child of rootNode.getChildren()) {
this.findProposedValueById(idToFind, child);
}
}
}
我叫thid方法:
const draggedProposedValue: TreeNode =
this.findProposedValueById(event.currentTarget.id, this.proposedValues )
但是findProposedValueById方法始终返回未定义
但是,我在'return rootNode;'处设置了一个断点。
我现在就停下来,节点是好节点
编辑: 我调试了
for (const child of rootNode.getChildren()) {
return this.findProposedValueById(idToFind, child);
}
事实上,他扫描到第一个分支(node1)的末端,并且当他完成操作时,他没有去到第二个分支(node2)
for (const child of rootNode.getChildren()) {
this.findProposedValueById(idToFind, child);
}
当他找到节点时,他没有停止并继续循环
答案 0 :(得分:0)
您应将return
放在for of
块中的递归调用之前:
findProposedValueById(idToFind: string, rootNode: TreeNode): TreeNode {
if (rootNode.getId() === idToFind) {
return rootNode;
} else {
for (const child of rootNode.getChildren()) {
return this.findProposedValueById(idToFind, child);
}
}
}