2013-09-25 4 views
-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

노드의 수를 세는 이유는 없습니다. 개체 인 한 루프가 필요하다고 가정 할 수 있습니다. 사이클을 저장하십시오. 발견 된 개체의 값이 null 경우

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

당신이 유사 false 또는 0 또는 -1을 사용했다 마찬가지로 경우에 문제가있을 것입니다 : 여기

는 단순화 된 버전입니다. 아마도 객체를 생성하고 경로를 반환하는 것이 가장 좋습니다. 이 방법을 사용하면보다 안전한 비교가 가능한 문자열 배열 만 처리 할 수 ​​있습니다.

작동 방식 업데이트 : http://jsfiddle.net/RRyRQ/3/

+0

너무 많은 의미가 있습니다! –