2017-12-11 10 views
0

에 재귀 적으로 중첩 된 배열을 만들기 내 배열다음 Node.js를

[ 
    {id: 1, title: 'hello', parent: {number:0}}, 
    {id: 2, title: 'hello', parent: {number:0}}, 
    {id: 3, title: 'hello', parent: {number:1}}, 
    {id: 4, title: 'hello', parent: {number:3}}, 
    {id: 5, title: 'hello', parent: {number:4}}, 
    {id: 6, title: 'hello', parent: {number:4}}, 
    {id: 7, title: 'hello', parent: {number:3}}, 
    {id: 8, title: 'hello', parent: {number:2}} 
] 

내가 출력으로 다음과 같이 중첩 된 개체를 갖고 싶어 :

[ 
    {id: 1, title: 'hello', parent: 0, children: [ 
     {id: 3, title: 'hello', parent: 1, children: [ 
      {id: 4, title: 'hello', parent: 3, children: [ 
       {id: 5, title: 'hello', parent: 4}, 
       {id: 6, title: 'hello', parent: 4} 
      ]}, 
      {id: 7, title: 'hello', parent: 3} 
     ]} 
    ]}, 
    {id: 2, title: 'hello', parent: 0, children: [ 
     {id: 8, title: 'hello', parent: 2} 
    ]} 
] 

재귀 함수 좀 도와주세요 node.js에서이 작업을 수행하십시오.

다음은 재귀 함수는 내가 시도한 것입니다 :

function getNestedChildren(arr, parent) { 
    var out = [] 
    for(var i in arr) { 
     if(arr[i].parent.number == parent.number) { 
      var children = getNestedChildren(arr, arr[i].id) 

      if(children.length) { 
       arr[i].children = children 
      } 
      out.push(arr[i]) 
     } 
    } 
    return out 
} 

는이 문제를 해결하기 위해 도와주세요. 나는 이것에 초보자입니다.

+1

당신은 무엇을 시도? 우리는 실제로 코딩 서비스가 아닙니다. 당신은 정말로 당신 자신이 어떤 시도를하고 나서 당신이 갇혀 있는지에 대해 질문해야합니다. – jfriend00

+0

이것은 시도했지만 시도 할 수 없습니다. getNestedChildren (arr, parent) { var out = [] for (var i in arr) { if (arr [i] .parent.number == parent .number) { VAR 아이 = getNestedChildren (도착, 도착 [I] .ID) 경우 (children.length) { 도착 [I]를 .children의 아이들 = } out.push (도착 [I]) } } 반품 } – Sahaja

+1

스택 오버플로에 오신 것을 환영합니다. 시도한 코드를 질문에 넣고 적절하게 형식을 정한 다음 결과가 무엇인지, 어디서 붙어 있는지, 구체적으로 코드에서 도움이 필요한 내용을 설명하십시오. 주석에 여러 줄 코드를 표시 할 수 없습니다. "편집"버튼을 사용하여 질문을 편집하여 시도한 코드와 추가 설명을 추가 할 수 있습니다. – jfriend00

답변

0

일부 변수의 이름을 변경하면이 문제를 해결하는 데 도움이됩니다.

  • getNestedChildren 어린이의 배열을 반환, 그래서 childrenout 이름을 바꿉니다.
  • 재귀 호출에 의해 반환 된 자식은 호출에서 처리되는 부모의 손자입니다. 재귀 호출 grandchildren의 결과를 호출하십시오.

코드가 작동하지 발생 문제 : 게시 된 코드의

  • 라인 4는 부모 매개 변수의 id 속성을 사용합니다. 따라서 getNestedChidren에 대한 모든 호출에서 해당 속성을 가진 객체를 제공하거나 (아래 참조) 두 번째 인수를 parentNumber으로 변경하고 number 속성의 숫자 값을 제공하면됩니다. 너의 선택.

마지막으로 for ... in 루프를 사용하여 배열을 반복하지 마십시오. 자세한 정보 및 토론을 위해 웹 검색을 수행하십시오.

var array = [ 
 
    {id: 1, title: 'hello', parent: {number:0}}, 
 
    {id: 2, title: 'hello', parent: {number:0}}, 
 
    {id: 3, title: 'hello', parent: {number:1}}, 
 
    {id: 4, title: 'hello', parent: {number:3}}, 
 
    {id: 5, title: 'hello', parent: {number:4}}, 
 
    {id: 6, title: 'hello', parent: {number:4}}, 
 
    {id: 7, title: 'hello', parent: {number:3}}, 
 
    {id: 8, title: 'hello', parent: {number:2}} 
 
] 
 
function getNestedChildren(arr, parent) { 
 
    var children = []; 
 
    for(var i =0; i < arr.length; ++i) { 
 
     if(arr[i].parent.number == parent.number) { 
 
      var grandChildren = getNestedChildren(arr, {number: arr[i].id}) 
 

 
      if(grandChildren.length) { 
 
       arr[i].children = grandChildren; 
 
      } 
 
      children.push(arr[i]); 
 
     } 
 
    } 
 
    return children; 
 
} 
 
var nest = getNestedChildren(array,{number: 0}); 
 
console.log(nest);

+0

정말 고마워요. 지금 일하고있다. – Sahaja