2016-03-14 79 views
1

這可能是很容易的,但我似乎無法找到如何在Javascript把對象屬性

合併2個對象

例如:對象一個

[ 
    { 
    "name":"Actief", 
    "children":[ 
     { 
     "name": "Vaste activa", 
     "children": [ 
      { 
      "name": "Immateriële vaste activa", 
      "children": null 
      }, 
      { 
      "name": "Materiële vaste activa", 
      "children": [ 
       { 
       "name": "Terreinen en gebrouwen", 
       "children": null 
       }, 
       { 
       "name": "Installaties, machines & uitrustingen", 
       "children": null 
       }, 
      ] 
      } 
     ] 
     } 
    ] 
    } 
] 

對象二:

[ 
    { 
     name: "Immateriële vaste activa", 
     data: [1.3, 2.4, 3.6, 0.2, 1.1], 
     year: [2009, 2010, 2011, 2012, 2013] 
    }, 
    { 
     name: "Terreinen en gebrouwen", 
     data: [1000300, 44589, 908887, 255667, 110000], 
     year: [2009, 2010, 2011, 2012, 2013] 
    }, 
    { 
     name: "Installaties, machines & uitrustingen", 
     data: [12000, 23000, 38000, 203000, 11111], 
     year: [2009, 2010, 2011, 2012, 2013] 
    } 
] 

於是解釋這多一點點,我建立一個AngularJS應用,其中在這個例子中,我做ng-repeatng-repeat裏面,所以我做一些作者第一個JSON對象的樹。最低級別(有時是5級)必須包含數據和年限,所以我試圖弄清楚如何合併這些多維數組/對象。

最好的將是,我oppinion,是有這樣的事情:

{ 
    "name": "Terreinen en gebrouwen", 
    "children": null, 
    "data": [1000300, 44589, 908887, 255667, 110000], 
    "year": [2009, 2010, 2011, 2012, 2013] 
}, 

它仍然將很難在我看來,發佈這一點,但我想我會是一個很大的一步,如果我的對象/數組看起來像這樣。

回答

1

這看起來相當簡單。

所有你需要的是遍歷對象的兩個的項目,然後找到具有相同名稱的對象在對象一個

我們的兩個對象:

var obj1 = [ 
    { 
    "name":"Actief", 
    "children":[ 
     { 
     "name": "Vaste activa", 
     "children": [ 
      { 
      "name": "Immateriële vaste activa", 
      "children": null 
      }, 
      { 
      "name": "Materiële vaste activa", 
      "children": [ 
       { 
       "name": "Terreinen en gebrouwen", 
       "children": null 
       }, 
       { 
       "name": "Installaties, machines & uitrustingen", 
       "children": null 
       }, 
      ] 
      } 
     ] 
     } 
    ] 
    } 
] 

var obj2 = [ 
    { 
     name: "Immateriële vaste activa", 
     data: [1.3, 2.4, 3.6, 0.2, 1.1], 
     year: [2009, 2010, 2011, 2012, 2013] 
    }, 
    { 
     name: "Terreinen en gebrouwen", 
     data: [1000300, 44589, 908887, 255667, 110000], 
     year: [2009, 2010, 2011, 2012, 2013] 
    }, 
    { 
     name: "Installaties, machines & uitrustingen", 
     data: [12000, 23000, 38000, 203000, 11111], 
     year: [2009, 2010, 2011, 2012, 2013] 
    } 
] 

那麼函數如果名稱相同,則添加屬性,或者如果有任何內容,請進入兒童陣列並重試:

function addProps(obj, o){ 

     for (var j = 0; j < obj.length; j++) { 
      var o2 = obj[j]; 
      if(o2.name === o.name) { 
       o2.data = o.data; 
       o2.year = o.year; 
      } else { 
       if(o2.children != null) addProps(o2.children, o); 
      } 
     } 

} 

現在遍歷對象在我的兩個代碼obj2

for (var i = 0; i < obj2.length; i++) { 
    var o = obj2[i]; 
    addProps(obj1, o); 
} 
+0

嗨@Molda它的作品!非常感謝你。我只是看到這麼多的代碼,有時我似乎無法找到正確的方法來完成這樣簡單的事情... – Peter

+0

嗨Molda,我不知道是否存在一種方法,你可以更新上面的代碼我有例如的情況obj1中的3000條記錄和obj2中的相同數量?現在迭代所有記錄需要很多時間。 – Peter

+0

你真的需要在客戶端處理這些數據嗎?當我需要時,我無法想象一種情況。如果你可以更詳細地解釋你在哪裏以及如何獲得數據,那麼你的問題可能會有不同的解決方案。我認爲沒有辦法通過大量數據提高性能。 – Molda