递归搜索

时间:2013-09-25 00:34:15

标签: javascript search object recursion

所以我对递归函数没有超级经验,但理想情况下,此函数会搜索特定子项的任意深度的对象并返回它,但出于某种原因,当我return r;得到{{1}时}。

http://jsfiddle.net/RRyRQ/

r = undefined

感谢。

1 个答案:

答案 0 :(得分:4)

没有理由计算节点的数量,只要它是一个对象,你可以假设一个循环是必要的 - 节省你自己的周期。

这是一个简化版本:

function search(_for, _in) {
    var r;
    for (var p in _in) {
        if ( p === _for ) {
            return _in[p];
        }
        if ( typeof _in[p] === 'object' ) {
            if ( (r = search(_for, _in[p])) !== null ) {
                return r;
            }
        }
    }
    return null;
}

如果找到的对象的值为null,则会出现问题,同样如果您同样使用false0-1。也许最好只构建并返回对象的路径;通过这种方式,您只需要处理一系列字符串,这样可以进行更安全的比较。

更新了工作小提琴:http://jsfiddle.net/RRyRQ/3/