关于购物车中退换数据的个数合并

本文介绍了如何使用JavaScript处理购物车数据,将ID相同的商品数量相加合并。以一个具体的例子展示原始数组到处理后的数组转换过程,并提供了一个实现该功能的封装函数,欢迎大家在评论区交流优化建议。
摘要由CSDN通过智能技术生成

最近写购物车时遇到将数组中每一项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;
}

将要处理的数据传入这个函数就可以得到想要的结果啦,大家有什么好的建议可以评论区一起交流~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值