我有一个递归方法,它接受一个键作为输入,并迭代一个对象数组来获取该键的值。
findKeyFun(passedKey: string): string {
let tempVal = null;
for(let i=0; i< this.valueArray.length; i++) {
if(this.valueArray[i].children) {
for(let j=0; j< this.valueArray[i].children.length; j++) {
if(this.valueArray[i].children[j].children) {
for(let k=0; k<this.valueArray[i].children[j].children.length; k++){
if(this.valueArray[i].children[j].children[k].key==passedKey){
tempVal = this.valueArray[i].children[j].children[k].value;
return tempVal;
}
}
}
}
}
}
return tempVal;
}
但是这段代码中涉及的for
循环太多了。无论密钥的位置如何,我如何制作这种递归方法?
答案 0 :(得分:0)
我为你创建了一个小样本。
容器类可能与您使用的数据结构类似。它有一把钥匙和一群孩子。
您在问题中使用的算法非常有问题。它只搜索初始对象的子项的子项。如果初始对象具有正确的键,则它仍然可以返回null。
我已经为您实现了深度优先搜索。 这应该在层次结构中的任何位置返回正确的子项。
class Container{
key: string;
children: Container[];
}
function searchKey(container: Container, key:string){
if (container.key == key) {
return container;
}
else if (container.children.length>0){
for (var child of container.children) {
var found = searchKey(child, key);
if (found != null) {
return found
}
}
}
return null
}
我建议你阅读这类算法。
这是一篇不错的wikipedia文章。