【发布时间】:2015-02-15 22:11:22
【问题描述】:
我有一个填充了对象的数组。当对象具有匹配的特定子值时,如何合并此数组中的对象?
我的数组如下所示:
var data = [
{
prod_name:"test1", type:"1", color:"white", product_id:"5"
},
{
prod_name:"test2", type:"1", color:"green", product_id:"7"
},
{
prod_name:"test2", type:"2", color:"green", product_id:"7"
},
{
prod_name:"test3", type:"4", color:"red", product_id:"8"
},
{
prod_name:"test4", type:"2", color:"white", product_id:"21"
}
];
我想根据匹配的 product_id 合并对象。
如果值不相同,我想保留两个值,用逗号分隔。所以前一个数组的结果会变成:
[
{
prod_name:"test1", type:"1", color:"white", product_id:"5"
},
{
prod_name:"test2", type:"1,2", color:"green", product_id:"7"
},
{
prod_name:"test3", type:"4", color:"red", product_id:"8"
},
{
prod_name:"test4", type:"2", color:"white", product_id:"21"
}
];
数组缩小了 1,因为它有一个重复,两个不同的值合并并用逗号分隔 type:"1,2"。
我认为以下方法会起作用:
jQuery.each( data, function( i, val ) {
var productID = val.product_id;
var index_key = i;
jQuery.each( data, function( i, val ) {
if(val.product_id == productID && data[index_key] != data[i]){
jQuery.extend(data[index_key], data[i]);
}
});
});
但这只会覆盖第一次命中的type 值并保留两个条目。
对于“可合并”项目,prod_name 和 product_id 的值始终相同。
有人知道达到预期结果的方法吗?
更新:
稍后可能会添加不同的值(产品属性)。因此,我更喜欢一种不专门检查type 属性的方法,而是检查不是product_id 或prod_name 的所有内容,如果有命中,则用逗号合并。
【问题讨论】:
标签: javascript jquery arrays object merge