2017-02-23 3 views
0
var sample = [{ 
     "_id": "1", 
     "category": "type1", 
     "path": "data1//data2//data3//data4", 
     "org": "001" 
    }, 
    { 
     "_id": "2", 
     "category": "type2", 
     "path": "data1//data2//data3//data4", 
     "org": "002" 
    } 
]; 

위의 샘플 데이터는 계층 적 구조로 변환해야합니다.계층 구조로 변환

var sample = { 
    children: [{ 
      name: "type1", 
      children: [{ 
       name: "data1", 
       children: [{ 
        name: "data2", 
        children: [{ 
         name: "data3", 
         children: [{ 
          name: "data4" 
         }] 
        }] 
       }] 
      }] 
     }, 
     { 
      name: "type2", 
      children: [{ 
       name: "data1", 
       children: [{ 
        name: "data2", 
        children: [{ 
         name: "data3" 
        }] 
       }] 
      }] 
     } 

    ] 
}; 

예상 출력 :

+type1 
    data1 
    data2 
     data3 
     data4 
+2

당신은 무엇을 시도? 우리가 당신을 도울 수 있기 전에 작동하지 않는 코드를 제공해야합니다. 당신이 뭔가를 시도하지 않은 경우 루핑 및 개체 생성에 대한 몇 가지 조사를 수행하고 특정 질문이있을 때 다시 돌아옵니다. – scrappedcola

+0

플랫 데이터를 계층 적 구조로 변환하는 방법을 도와주세요 – srinivas

+1

_StackOverflow_에 오신 것을 환영합니다! 여기에서 [How to Ask] (http://stackoverflow.com/help/how-to-ask)를 올바르게 배울 수 있습니다. 질문을 할 때 [topic] (http://stackoverflow.com/help/on-topic)인지 확인하고 [Minimal, Complete, Verifiable example] (http : // stackoverflow. co.kr/help/mcve)를 참조하십시오. 지금까지 뭐 해봤 어? – lealceldeiro

답변

0

당신은 카테고리 또는 경로 값을 통해 액세스의 가능성 중첩 된 구조의 하위 레벨을 할당하기위한 해시 테이블과 계층 구조를 사용할 수 있습니다.

기본적으로이 제안은 키를 확인하고 개체에없는 경우 하위 개체에 대한 단일 속성 및 배열을 가진 새 개체가 만들어지며 새 개체는 부모 밑줄 배열로 새롭게 만들어집니다. 이전에 작성한 배열의 배열과 동일한 참조.

실제 수준이 반환됩니다. 마지막에 객체가 lanst 값으로 생성되고 배열로 푸시됩니다.

var sample = [{ _id: "1", category: "type1", path: "data1//data2//data3//data4", org: "001" }, { _id: "2", category: "type2", path: "data1//data2//data3//data4", org: "002" }], 
 
    result = { children: [] }; 
 

 
sample.forEach(function (a, i) { 
 
    var keys = [a.category].concat(a.path.split('//')), 
 
     last = keys.pop(); 
 

 
    keys.reduce(function (r, k) { 
 
     if (!r[k]) { 
 
      r[k] = { _: [] }; 
 
      r._.push({ name: k, children: r[k]._ }); 
 
     } 
 
     return r[k]; 
 
    }, this)._.push({ name: last }); 
 
}, { _: result.children }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

관련 문제