Typescript / Javascript:获取键值的递归方法

时间:2017-06-18 07:42:16

标签: javascript typescript recursion

我有一个递归方法,它接受一个键作为输入,并迭代一个对象数组来获取该键的值。

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;
  }

Plunker

但是这段代码中涉及的for循环太多了。无论密钥的位置如何,我如何制作这种递归方法?

1 个答案:

答案 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文章。