2016-10-30 1 views
0

다른 underscrore.js 또는 뭔가 변환 :자바 스크립트 객체 I는 다음과 같은 목적을 가지고

var obj1 = { 

    "Prop1": { 
     "Prop2": { 
      "Prop2.1": "value1", 
      "Prop2.2": "value2" 
     }, 
     "Prop3": { 
      "Prop3.1": "value3", 
      "Prop3.2": "value4" 
     }, 
     "Prop4": { 
      "Prop4.1": "value5", 
      "Prop4.2": "value6", 
      "Prop4.3": "value7" 
     } 
    } 
}; 

하지만 아래의 객체에이 객체를 변환 할 : 당신이 볼 수 있듯이

var obj1 = { 

    "data": [ 
    { 
      "id": "Prop1", 
      "data": [ 
       { 
        "id": "Prop2", 
        "data": [ 
         {"id": "Prop2.1","value": "value1"}, 
         {"id": "Prop2.2","value": "value2"} 
        ] 
       }, 
       { 
        "id": "Prop3", 
        "data": [ 
         {"id": "Prop3.1","value": "value3"}, 
         {"id": "Prop3.2","value": "value4"} 
        ] 
       }, 
       { 
        "id": "Prop4", 
        "data": [ 
         {"id": "Prop4.1","value": "value5"}, 
         {"id": "Prop4.2","value": "value6"}, 
         {"id": "Prop4.3","value": "value7"} 
        ] 
       }, 
      ] 
     }, 
    ] 
}; 

, 개체 구조가 완전히 다를 것입니다. 언더 코어 .js 또는 다른 항목을 사용하여 쉽게 변경할 수 있습니까?

답변

0

새 개체를 작성하는 데 반복적 인 재귀 방식을 사용할 수 있습니다.

function convert(object) { 
 
    return Object.keys(object).map(function (k) { 
 
     var o = { id: k }; 
 
     if (object[k] !== null && typeof object[k] === 'object') { 
 
      o.data = convert(object[k]); 
 
     } else { 
 
      o.value = object[k]; 
 
     } 
 
     return o; 
 
    }); 
 
} 
 

 
var source = { Prop1: { Prop2: { "Prop2.1": "value1", "Prop2.2": "value2" }, Prop3: { "Prop3.1": "value3", "Prop3.2": "value4" }, Prop4: { "Prop4.1": "value5", "Prop4.2": "value6", "Prop4.3": "value7" } } }, 
 
    target = { data: convert(source) }; 
 

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

관련 문제