【问题标题】:Recursive search递归搜索
【发布时间】:2013-09-25 00:34:15
【问题描述】:

所以我对递归函数不是超级有经验,但理想情况下,这个函数会搜索任意深度的对象以查找特定子对象并返回它,但由于某种原因,当我 return r; 得到 r = undefined 时。

http://jsfiddle.net/RRyRQ/

function search(_for, _in) {
    var r;
    for (var p in _in) {

        // is a match
        if (p == _for) {
            console.log("MATCH");
            r = _in[_for];
            break;
        }

        // if not a match but has children
        if (p != _for && nodeCount(_in[p]) > 0 && r == false) {
            console.log("RECURSE INTO " + p);
            r = search(_for, _in[p]);
        }

    }
    return r;
}

谢谢。

【问题讨论】:

    标签: javascript search object recursion


    【解决方案1】:

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

    这是一个简化版:

    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/

    【讨论】:

    • 这很有意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2014-01-10
    • 2019-03-12
    • 2016-11-13
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多