2016-09-20 2 views
1

개체를 모른 채 value에 의해 key을 찾으려고합니다. 따라서 중첩 개체를 포함하므로 함수에서 키와 개체를 가져 와서 값을 반환하거나 정의되지 않은 값을 반환합니다. 이 (그래서 희망을 ...) 더 효율적일 수 있도록 내가 루프 내부에 return 전화키로 개체 값 찾기 및 검색

/* Iterate over object and include sub objects */ 

function iterate (obj, key) { 

    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      //in case it is an object 
      if (typeof obj[property] == "object") { 
       if (obj.hasOwnProperty(key)) { 
        return obj[key]; //return the value 
       } 
      } 
      else { 
       iterate(obj[property]); 
      } 
     } 
    } 

    return undefined; 
} 

: 이 제 기능입니다.

1 누구나이 기능을 사용할 준비가 되셨습니까? 이 하나는 작동하지 않습니다.

2. 누군가가 작동하도록 변경하려면 무엇을 알고 있습니까?

angular.js 기능을 포함한 모든 도움이 유용 할 것입니다.

감사합니다.

답변

4

당신은 조금 일을 반전 당신은 재귀 함수 호출에 두 번째 매개 변수를 전달하는 것을 잊었다. 또한이 경우 기본값 인 undefined을 반환 할 필요가 없습니다.

function iterate (obj, key) { 
    var result; 

    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      // in case it is an object 
      if (typeof obj[property] === "object") { 
       result = iterate(obj[property], key); 

       if (typeof result !== "undefined") { 
        return result; 
       } 
      } 
      else if (property === key) { 
       return obj[key]; // returns the value 
      } 
     } 
    } 
} 
+0

값이 leve1.leve2.key 인 경우 2 레벨 이상은 작동하지 않습니다. 찾지 못합니다. –

+0

난 그냥 5 단계로 테스트하고, 열쇠를 발견했습니다. iterate ({a : {b : {c : {d : {key : 3}}}}, "key"); – felipeptcho

+0

예. 이건 잘못 됐어. 답변을 업데이트했습니다. 시험 해봐. – felipeptcho

1

은 먼저이 문제를 해결하는 기능과 패턴 화 해제 : 이 Fastest way to flatten/un-flatten nested JSON objects

다음 단순히 hasOwnProperty을 사용하여 다시

+0

나는 개체를 그대로 유지하는 것이 좋습니다. 결과 표시 및 게시. –