js写了一个方法用来将一个对象数组中多个key值相同的进行累加然后返回对应数组

背景:是为了实现数据表里面的单页数据进行累加,但是并不是直接加,而是要在对象里面的多个字段值相同才能加到一组,并且还要预防后端返回数据为字符串或者为null的情况(自己也考虑了一下时间复杂度和空间复杂度)
没有考虑数组为无限层级的情况
思路:1、遍历目标数组
2、初始一个结果的空数组
3、在结果数组中找有没有具备条件的目标数组中的元素,找到并且存下当前结果数组的索引位置
4、如果没找到直接push到结果数组里面,找到了进行累加,当累加的值为空或者null默认为0,其他强制转number类型
5、返回结果
补充:因数据类型不规范可能导致累加数据出现字符串,所以需要先转number,转number某些数据类型可能会出问题,这里只考虑基本数据类型的情况

//arr目标数组
//keyArr筛选项数组(字符串组成的数组)
//figureArr计算项数组(字符串组成的数组)
//emptyArr置空项数组(字符串组成的数组)
//altContent替换某个属性的值
divideGroup(arr=[],keyArr=[],figureArr=[],emptyArr=[],altContent){
      let results=[]
      arr.forEach((item)=>{
        let start=-1
        let obj=results.find((ele,index)=>{
          let flag=keyArr.every(content=>{
            return ele[content]==item[content]
          })
          if(flag){
            start=index
          }
          return flag
        })
        if(obj){
          figureArr.forEach(val=>{
            if(item[val]){
              results[start][val]+=Number(item[val])
            }
          })
        }else{
          let o={
				
          }
          figureArr.forEach(key=>{
	          if(item[key]){
	          	o[key]=Number(item[key])
	          }else{
	          	o[key]=0
	          }
          })
          emptyArr.forEach(key=>{
	          item[key]=''
          })
          for(let key in altContent){
          	item[key]=altContent[key]
          }
          results.push(Object.assign({},item,o))
        }
      })
      return results
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值