2016-03-04 71 views
0

我得到一個對象從我的REST的API類似這樣的dessolve對象結構

var obj = { 
      array1: [ 
       { 
        "elm": 1, children: [ 
        { 
         "elm": 2, children: [ 
         { 
          "elm": 3, children: [ 
          { 
           "elm": 4, children: [ 
           {"elm": 5} 
          ] 
          } 
         ] 
         } 
        ] 
        } 
       ] 
       } 
      ], 
      array2: [ 
       { 
        "elm": 6, children: [ 
        { 
         "elm": 7, children: [ 
         { 
          "elm": 8, children: [ 
          { 
           "elm": 9, children: [ 
           {"elm": 10} 
          ] 
          } 
         ] 
         } 
        ] 
        } 
       ] 
       } 
      ] 
     }; 

由於更改界面,並具有對API和他們structurebuild我有對象dessolve到這樣的事情沒有訪問:

var newObj = { 
     array1: [ 
      { 
       "elm": 1, children: [ 
       {"elm": 2}, 
       {"elm": 3}, 
       {"elm": 4}, 
       {"elm": 5} 
      ] 
      } 
     ], 
     array2: [ 
      { 
       "elm": 6, children: [ 
       {"elm": 7}, 
       {"elm": 8}, 
       {"elm": 9}, 
       {"elm": 10} 
      ] 
      } 
     ] 
    }; 

是否有一種更簡單的方法來解除對象而不循環每個孩子?

+0

* 「我有對象dessolve到像這樣」 *你確定嗎? –

+0

是的,我是。我們得到了子類別子類別的子類別。現在我們只有1個子類別,所有的孩子都應該在其中顯示。對於我們接下來的步驟,我們必須使用所有的孩子ID來獲得我們想要的物品。 –

回答

1

或許這對你的作品...

var obj = { array1: [{ "elm": 1, children: [{ "elm": 2, children: [{ "elm": 3, children: [{ "elm": 4, children: [{ "elm": 5 }] }] }] }] }], array2: [{ "elm": 6, children: [{ "elm": 7, children: [{ "elm": 8, children: [{ "elm": 9, children: [{ "elm": 10 }] }] }] }] }] }, 
 
    result = function (object) { 
 

 
     function dig(a) { 
 
      this.push({ elm: a.elm }); 
 
      Array.isArray(a.children) && a.children.forEach(dig, this); 
 
     } 
 

 
     var r = {}; 
 
     Object.keys(object).forEach(function (k) { 
 
      object[k].forEach(function (a) { 
 
       var array = []; 
 
       r[k] = r[k] || []; 
 
       r[k].push({ elm: a.elm, children: array }); 
 
       Array.isArray(a.children) && a.children.forEach(dig, array); 
 
      }); 
 
     }); 
 
     return r; 
 
    }(obj); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

這個很好用!非常感謝。 –