最近写购物车时遇到将数组中每一项id相同的数据合并,同时将id相同的数据的表示个数的参数相加(表达的可能不太清除,直接举例上数据如下):
原数组:
var ar=[{“actnum”:1,“goods_id”:623,“goods_name”:"IDPNa Vigi+剩余电流动作保护断路器 ",“act”:“t”},
{“actnum”:1,“goods_id”:622,“goods_name”:“继电器”,“act”:“t”},
{“actnum”:1,“goods_id”:624,“goods_name”:“TeSys D 三极接触器, 9A, 220 V, 50/60Hz”,“act”:“t”},
{“actnum”:2,“goods_id”:623,“goods_name”:"IDPNa Vigi+剩余电流动作保护断路器 ,“act”:“t”},
{“actnum”:3,“goods_id”:624,“goods_name”:“TeSys D 三极接触器, 9A, 220 V, 50/60Hz”,“act”:“t”}]
处理要求:
goods_id相同的数据合并,同时将合并数据的actnum相加。
处理后数组:
var arr2=[{“actnum”:3,“goods_id”:623,“goods_name”:"IDPNa Vigi+剩余电流动作保护断路器 ",“act”:“t”},
{“actnum”:1,“goods_id”:622,“goods_name”:“继电器”,“act”:“t”},
{“actnum”:4,“goods_id”:624,“goods_name”:“TeSys D 三极接触器, 9A, 220 V, 50/60Hz”,“act”:“t”}}]
封装后函数如下:
function handle(arr){
if(arr.length==0){
console.log("传值为空");
return false;
}
let arr1=[];
let arr2=[];
for(let i=0;i<arr.length;i++){
arr1.push(arr[i].goods_id)
}
arr1=new Set(arr1);
arr1=Array.from(arr1)
for(let j=0;j<arr1.length;j++){
arr2[j]=[];
arr.forEach(function(item){
if(item.goods_id==arr1[j]){
arr2[j].push(item)
}
})
}
arr2.forEach(function(item,index,_arr){
if(item.length>1){
item[0].actnum=item.reduce(function(x,y){
return x.actnum+y.actnum;
})
}
_arr[index]=item[0];
})
return arr2;
}
将要处理的数据传入这个函数就可以得到想要的结果啦,大家有什么好的建议可以评论区一起交流~