2016-10-30 70 views
0

我有一個對象,如下圖所示:Javascript對象變換與underscrore.js或別的東西

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"} 
        ] 
       }, 
      ] 
     }, 
    ] 
}; 

正如你所看到的,對象結構將會完全不同。 我可以使用underscore.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; }