2012-12-11 3 views
1

동적으로 중첩 된 트리 객체를 자바 스크립트를 사용하여 아래와 같이 만들려고합니다.이를 달성하기위한 가장 좋은 방법을 알려주시겠습니까?자바에서 중첩 된 객체를 형성하는 방법

var contextpath= { 
     text: "TreeRoot", 
     items: [ { 
      text: "subgroup1" , 
      items: [ { 
       text: "subgroup2", 
       items: [ { 
        text: "subgroup3", 
        items: [ { 
         text: "subgroup4", 
         items: [ { 
          text: "subgroup5" 
         }] 
        }] 
       }] 
      }] 
     }] 
    }; 

개체로 변환하려고하는 문자열을 구분했습니다 (트리 구성 요소의 datource로 사용할 수 있음).

var path = "TreeRoot | subgroup1 | subgroup2";

적은 수의 변수를 사용하여 재귀/반복을 사용하여 다음과 같이 구현하려고합니다.

var contextpathText= {}; 
    contextpathText.text ="TreeRoot"; 

    var childObject={}; 
    var items=[]; 
    childObject.text ="subgroup1"; 
    items.push(childObject); 
    contextpathText.items=(items); 
+1

확인한 것처럼 보입니다. http://www.whathaveyoutried.com –

+0

정확히 달성하기를 원하십니까? 이 개체를 만드시겠습니까? 매개 변수는 무엇입니까? 이 배열로 변환하려는 배열이 있습니까? 이처럼'n' 깊은 객체를 만들고 싶습니까? –

+0

subgroup2는 subgroup1의 하위 그룹입니까? – Christophe

답변

2

깊이 카운터가 필요하며 작업중인 개체의 현재 수준을 저장해야합니다.

var obj = {text:''}, parent, child, i = 0; 
obj.text = 'TreeRoot'; 
parent = obj; 
while (++i <= 5) { 
    if (parent.items === undefined) parent.items = []; // because you don't have an items on the last subgroup you can't put it in the object literal 
    child = {text: 'subgroup'+i}; 
    parent.items.push(child); 
    parent = child; 
} 
parent = child = null; // cleanup 
obj; 

jsbeautifiedJSON.stringify(obj)는 구분 된 문자열에 대한

{ 
    "text": "TreeRoot", 
    "items": [{ 
     "text": "subgroup1", 
     "items": [{ 
      "text": "subgroup2", 
      "items": [{ 
       "text": "subgroup3", 
       "items": [{ 
        "text": "subgroup4", 
        "items": [{ 
         "text": "subgroup5" 
        }] 
       }] 
      }] 
     }] 
    }] 
} 

편집 지금

var path = 'TreeRoot|subgroup1|subgroup2'; 

var obj = {text:''}, parent, child, levelText = path.split('|').reverse(); 
obj.text = levelText.pop() || ''; 
parent = obj; 
while (levelText.length > 0) { 
    child = {text: levelText.pop()}; 
    if (!parent.items) parent.items = []; 
    parent.items.push(child); 
    parent = child; 
} 
obj; 
1

그것에 나를 이길하지만이 코드와 함께 갔다 :

var contextpath = { text: "TreeRoot", items: []} 

var items = contextpath.items; 

for(var i = 1; i <= 5; i++) { 
    items.push({ text: "subgroup" + i, items: []}); 
    items = items[0].items; 
} 

부모 인 & 자식 명명법이 분명히 분명합니다.하지만 먼저 새 개체를 변수로 선언 할 필요가 없다는 것을 보여주고 싶습니다. 개체 리터럴을 밀어 넣을 수 있습니다.

이제 원하는 구조에 항목 배열이없는 것으로 나타났습니다. 내 코드가 여분을 만듭니다. 따라서 끝낼

// snip 
       text: "subgroup4", 
        items: [ { 
         text: "subgroup5", 
         items: [] 
        }] 
// etc. 
+0

고마워요 !!!! 이것은 완벽하게 작동합니다. – Learner

+0

당신은 매우 환영합니다. 그러나 Paul S.의 대답은 당신이 요구 한 것과 더 가깝게 일치합니다. –

관련 문제