2014-07-25 3 views
0

중첩 된 탐색 목록을 나타내는 객체의 배열이 있습니다.javascript/lodash로 중첩 된 객체의 배열을 반복합니다.

[ 
    { 
     name: 'one', 
     link: 'blah/blah', 
     pages: [ 
      { 
       name: 'one A' 
       link: 'blah/blah', 
       pages: [] 
      }, 
      { 
       name: 'one B' 
       link: 'blah/blah', 
       pages: [] 
      }, 
      { 
       name: 'one C' 
       link: null, 
       pages: [ 
        { 
         name: 'one C I' 
         link: 'blah/blah', 
         pages: [] 
        } 
       ] 
      } 
     ] 
    } 
] 

개체의 첫 번째 수준에는 링크가 있고 페이지에는 중첩 된 개체에 링크 또는 페이지가 있습니다. 나는 둥지 깊이에 한계를 가정 할 수 없다. 이름이 포함 된 각 주마다 개체가 필요합니다. 존재하는 경우 링크, 부모가 모두 포함됩니다. 현재 솔루션은 3 단계 이상의 중첩을 설명하지 않으며 각 계층에 대한 지원을 추가하는 것은 힘듭니다.

결과의 배열을 검색하여 솔루션에 차이가 나는 경우 나중에 링크를 얻을 수 있어야합니다.

I 반복적 어레이를 통해 lodash 라이브러리 여기

+1

각 중첩 목록을 매개 변수로 사용하는 재귀 함수를 작성하는 것이 가장 좋습니다. 중첩 목록이 비어 있지 않으면 함수를 다시 호출하십시오. – Trace

+0

감사합니다. 나는 반복하면서 모든 부모를 추적하는 방법을 잘 모르겠다. – Ir1sh

+0

무슨 뜻인지 확실치 않습니다. 최상위 레벨을 반복하면서 하위 레벨에서 동일한 함수를 호출하면 목록에있는 모든 '페이지'속성을 통과하게됩니다. – Trace

답변

10

에 포함 된 기능을 사용할 반복하는 방법이다 자바 스크립트 솔루션이 필요하지만 (하고 싶다) 수

http://jsfiddle.net/yLnZe/37/

var arrPages = [{ 
     name: 'one', 
     link: 'blah/blah', 
     pages: [{ 
       name: 'one A', 
       link: 'blah/blah', 
       pages: [] 
      }, 
      { 
       name: 'one B', 
       link: 'blah/blah', 
       pages: [] 
      }, 
      { 
       name: 'one C', 
       link: null, 
       pages: [{ 
         name: 'one C I', 
         link: 'blah blah', 
         pages: [] 
        }] 
      }] 
    }]; 

function recursiveFunction(collection){ 
    _.each(collection, function(model){ 
     console.log(model); 
     if(model.pages.length > 0){ 
      recursiveFunction(model.pages); 
     } 
    }); 
}; 

recursiveFunction(arrPages); 

필요한 것이거나 구체적으로 필요한 것이 있습니까? 마지막 코멘트를 기반으로, 필요한 것이 있으면 조금 혼란 스럽습니다.

+1

이것은 나머지 부분을 알아내는 데 충분해야합니다. 감사합니다. – Ir1sh

관련 문제