js 数组 分组 遍历 求和

如同标题那样,现在有个需求是有一个数组需要根据对象属性分组,然后计算求和每组指定属性的值。

如果只是循环,那么也可以没有难度,但咱们编码还是需要尽量符合代码规范的,能不饶弯路何必煞费苦心呢?

直接贴代码


 function test(){ 
        //克隆,this.tableData是目标数组
        //根据自身需求是否需要克隆,笔者这克隆是为了保护this.tableData数据
        var arr = _.cloneDeep(this.tableData);
        //注意这里的j不需要自增或自加
 		for (var j = 0; j < arr.length; ) {
 		//根据对象某个属性过滤出目标数组
        var t = _.filter(arr, { workDate: arr[j].workDate });
        var sum = 0;
        for (var y = 0, len1 = t.length; y < len1; y++) {
          //这里做一下属性判断
          if (typeof t[y].workHours != "undefined") {
            //目标和相加,得到之后就可以进行你需要的操作了。
            sum = sum + t[y].workHours;
          }
        }
        //非常重要的一步,数组的splice方法进行删除数组元素
        //上面的j不用改变是因为arr.length会动态变化。
        arr.splice(j, t.length);
      }
      }

题外话
_.cloneDeep()拷贝方法,_.filter()返回一个新的过滤后的数组,都来自Lodash,虽然js原生有clone和筛选数组的方法,但是还是推荐一下Lodash网站,里面还有很多高效包装好的方法,建议学习学习。https://www.lodashjs.com/

大概思路就是这样,注意笔者这里的数组已经是排好序的了,所以可以使用splice()进行删除,可根据自身需要灵活修改,共同努力,共同进步。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值