2016-05-27 93 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

很高兴工作!有一种方法可以使这个完全动态,以防万一你改变你的对象键,但对于这个特定的应用程序,这是很好的去。 –

相关问题