-1

したがって、私は再帰関数の経験が豊富ではありませんが、理想的には、この関数は特定の子の任意の深さのオブジェクトを検索して返しますが、何らかの理由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;
}

ありがとう。

4

1 に答える 1

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/

于 2013-09-25T00:58:19.987 に答える