parent-child 数据结构类型中的递归搜索
Recursive search in parent-child data structure type
我有这样的数据结构:
每个 child 可以有无限列表 children
我想通过 Id 在这个 'tree' 中找到一个特定的 child 并通过 link 找到一个特定的 return。
这是我目前所拥有的:
getNodeById(nodes: child[], id: number) {
for (var i = 0; i < nodes.length; i++) {
if (id === nodes[i].id) {
return nodes[i];
}
}
for (var i = 0; i < nodes.length; i++) {
return this.getNodeById(nodes[i].children, id);
}
return null;
}
问题是不可能在第二个 for 循环中执行多个 return。 return 语句仅在 i 为 0 时发生。
我也试过:
private getNodeById(nodes: child[], id: number) {
for (var i = 0; i < nodes.length; i++) {
if (id === nodes[i].id) {
return nodes[i];
}
}
for (var i = 0; i < nodes.length; i++) {
var children: child[] = [];
children = children.concat(nodes[i].children)
}
if (children.length > 0) {
return this.getNodeById(children, id);
}
return null;
}
什么是不合适的,因为它没有 return 价值 link,所以
当我在函数外更改 returned child 时,它不会影响树
假设应该只有一个唯一匹配项(因为您不想在第一个循环中找到多个匹配项),您可以这样做:
for (var i = 0; i < nodes.length; i++) {
var match = this.getNodeById(nodes[i].children, id);
if (match) {
return match;
}
}
我有这样的数据结构:
我想通过 Id 在这个 'tree' 中找到一个特定的 child 并通过 link 找到一个特定的 return。
这是我目前所拥有的:
getNodeById(nodes: child[], id: number) {
for (var i = 0; i < nodes.length; i++) {
if (id === nodes[i].id) {
return nodes[i];
}
}
for (var i = 0; i < nodes.length; i++) {
return this.getNodeById(nodes[i].children, id);
}
return null;
}
问题是不可能在第二个 for 循环中执行多个 return。 return 语句仅在 i 为 0 时发生。
我也试过:
private getNodeById(nodes: child[], id: number) {
for (var i = 0; i < nodes.length; i++) {
if (id === nodes[i].id) {
return nodes[i];
}
}
for (var i = 0; i < nodes.length; i++) {
var children: child[] = [];
children = children.concat(nodes[i].children)
}
if (children.length > 0) {
return this.getNodeById(children, id);
}
return null;
}
什么是不合适的,因为它没有 return 价值 link,所以 当我在函数外更改 returned child 时,它不会影响树
假设应该只有一个唯一匹配项(因为您不想在第一个循环中找到多个匹配项),您可以这样做:
for (var i = 0; i < nodes.length; i++) {
var match = this.getNodeById(nodes[i].children, id);
if (match) {
return match;
}
}