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);
        };
效果图
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容