js 数组封装方法实现类似sql的groupBy分组求和。

分组求和

      function GroupBy(datas,keys,callBack) {
          const list = datas || [];
          const groups = [];
          list.forEach(v => {
              const key = {};
              const data = {};
              keys.forEach(k => {
                  key[k] = v[k];
              });
              let group = groups.find(v => {
                  return v._key === JSON.stringify(key);
              });
              if (!group) {
                  group = {
                      _key:JSON.stringify(key),
                      key: key,
                  };
                  groups.push(group);
              }
              if(callBack){
                  group.data = callBack(group.data,v);
                  group.total=group.total||0;
                  group.total++;
              }else {
                  group.data=group.data||[];
                  group.data.push(v);
              }
          });
          return groups;
      }

测试函数

        window.onload=function () {
            const data = [
                {key:1,key2:1,v:123},
                {key:1,key2:1,v:55},
                {key:2,key2:1,v:85},
                {key:1,key2:2,v:15},
                {key:2,key2:1,v:99}
            ];
            var d = GroupBy(data,['key','key2'],(d,v)=> {
                d = d||0;
                return d+=v.v;
            });
            console.log(d);
            var a = GroupBy(data,['key','key2']);
            console.log(a);
        };

效果图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法工程师的养成之路

牛顿法与拟牛顿法

牛顿法和拟牛顿法是求解无约束最优化的常用方法,有收敛速度快的优点. 牛顿法属于迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算复杂. 拟牛顿法通过正定...

24720
来自专栏老欧说安卓

Android开发笔记(二十七)对象序列化

程序中存储和传递信息,需要有个合适的数据结构,最简单的是定义几个变量,变量多了之后再分门别类,便成了聚合若干变量的对象。代码在函数调用时可以直接传递对象,但...

10740
来自专栏刨根究底学编程

刨根究底字符编码之零——前言

字符编码是计算机世界里最基础、最重要的一个主题之一。不过,在计算机教材中却往往浮光掠影般地草草带过,甚至连一本专门进行深入介绍的著作都找不到(对这一点我一直很困...

10620
来自专栏刨根究底学编程

刨根究底字符编码之十二——UTF-8究竟是怎么编码的

UTF-8编码是Unicode字符集的一种编码方式(CEF),其特点是使用变长字节数(即变长码元序列、变宽码元序列)来编码。一般是1到4个字节,当然,也可以更长...

14440
来自专栏中科院渣渣博肆僧一枚

tf.expand_dims()使用

他所实现的功能是给定一个input,在axis轴处给input增加一个为1的维度。 

1K30
来自专栏指点的专栏

2018 团队设计天梯赛题解---华山论剑组

2018 年度的团队设计天梯赛前几天结束了。但是成绩真的是惨不忍睹。。。毕竟是团队的比赛,如果团队平均水平不高的话,单凭一个人,分再高也很难拉起来(当然,一个人...

88020
来自专栏算法工程师的养成之路

数据降维(四)ISOMAP

Isomap(Isometric Feature Mapping)是流行学习的一种,用于非线性数据降维,是一种无监督算法.

13010
来自专栏老欧说安卓

Android开发笔记(十八)书籍翻页动画PageAnimation

前面几节的动画都算简单,本文就介绍一个复杂点的动画——书籍翻页动画。Android有自带的翻页动画ViewPager,不过V...

42540
来自专栏刨根究底学编程

刨根究底字符编码之十四——UTF-16究竟是怎么编码的

首先要注意的是,代理Surrogate是专属于UTF-16编码方式的一种机制,UTF-8和UTF-32是不用代理的。

13530
来自专栏刨根究底学编程

刨根究底字符编码之十三——UTF-16编码方式

UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets、2-byte Universal Cha...

13040

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励