2016-05-27 120 views
0

如何使用jQuery合併child_array.cat_parent_id == parent_array.cat_id上的以下兩個陣列?根據匹配的對象值將對象從一個陣列合併到另一個陣列

的parent_array:

[{ 
    "cat_name" : "Fruit", 
    "cat_id" : 77 
}, { 
    "cat_name" : "Vegetables", 
    "cat_id" : 221 
}] 

而且我想其中child_array已經合併成parent_array:

[{ 
    "cat_name" : "Bananas", 
    "cat_id" : 79, 
    "cat_parent_id" : 77 
},{ 
    "cat_name" : "Apples", 
    "cat_id" : 80, 
    "cat_parent_id" : 77 
}, { 
    "cat_name" : "Carrots", 
    "cat_id" : 222, 
    "cat_parent_id" : 221 
}] 

這裏的想輸出什麼,我的樣子:

[{ 
    "cat_name" : "Fruit", 
    "cat_id" : 77, 
    "cat_children": [ 
    { 
     "cat_name" : "Bananas", 
     "cat_id" : 79 
    }, 
    { 
     "cat_name" : "Apples", 
     "cat_id" : 80 
    } 
    ] 
}, { 
    "cat_name" : "Vegetables", 
    "cat_id" : 221, 
    "cat_children": [ 
    { 
     "cat_name" : "Carrots", 
     "cat_id" : 222 
    } 
    ] 
}] 
+0

你嘗試過什麼來解決這個問題?你堅持什麼解決方案的一部分? –

+1

嵌套循環應該這樣做。如果將父數組轉換爲鍵是類別ID的對象,會更容易。 – Barmar

回答

0

你不一定需要jQuery來做到這一點...只需寫一些嵌套的循環,並做一些檢查秒。您的JSON結構可以大大優化,以實現這一目標,但下面的函數將實現它,它是這樣的:

function merge(_parent,_children){ 
    var result = _parent; 
    for(x in _children){ 
    var parentID = _children[x].cat_parent_id; 
    for(y in _parent){ 
     if(_parent[y].cat_id == parentID){  
     if(!result[y].cat_children){ 
      result[y].cat_children = []; 
     } 
     result[y].cat_children.push(_children[x]); 
     } 
    } 
    } 
    return result; 
} 
+0

感謝你 - 很好,很直接。我不得不將for循環更改爲'for(var x = 0; x <_children.length; x ++)'格式以避免重複的子對象,但也許這與我的特定設置有關。 – Troy

+0

很高興工作!有一種方法可以使這個完全動態,以防萬一你改變你的對象鍵,但對於這個特定的應用程序,這是很好的去。 –

相關問題