Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 减少对象数组,并为每个不同对象求和属性_Javascript - Fatal编程技术网

Javascript 减少对象数组,并为每个不同对象求和属性

Javascript 减少对象数组,并为每个不同对象求和属性,javascript,Javascript,我不确定我应该考虑哪些功能来实现我正在尝试做的事情。可能是不正确的 数据库查询返回如下对象列表: result = [{group1: 'A', group2: 'A', SUM: 5}, {group1: 'A', group2: 'B', SUM: 2}, {group1: 'C', groupe2: 'B', SUM: 3} ] 我想“减少”或“分组”此数组,以获得每个不同group1和group2值的对象,以及它的相对总和,

我不确定我应该考虑哪些功能来实现我正在尝试做的事情。可能是不正确的

数据库查询返回如下对象列表:

result = [{group1: 'A', group2: 'A', SUM: 5},
           {group1: 'A', group2: 'B', SUM: 2},
           {group1: 'C', groupe2: 'B', SUM: 3}
         ]
我想“减少”或“分组”此数组,以获得每个不同
group1
group2
值的对象,以及它的相对总和,如下所示:

wanted = [{group1: 'A', group1_SUM: 7, group2: 'A', group2_SUM: 5},
          {group1: 'B', group1_SUM: 0, group2: 'B', group2_SUM: 5},
          {group1: 'C', group1_SUM: 3, group2: 'C', group2_SUM: 0}
         ]
或者也可以是:

wanted = [{groupName: 'A', group1_SUM: 7, group2_SUM: 5},
          {groupName: 'B', group1_SUM: 0, group2_SUM: 5},
          {groupName: 'C', group1_SUM: 3, group2_SUM: 0}
         ]

第一个函数减少
结果
,以查找每组的总和

然后我们通过每组返回结果

var result = [{group1: 'A', group2: 'A', SUM: 5},
  {group1: 'A', group2: 'B', SUM: 2},
  {group1: 'C', group2: 'B', SUM: 3}
];

(function groupSum(result) {
  var sums = result.reduce(function(a, e) {
    a.group1_SUM[e.group1] = (a.group1_SUM[e.group1] || 0) + e.SUM;
    a.group2_SUM[e.group2] = (a.group2_SUM[e.group2] || 0) + e.SUM;
    return a;
  }, {group1_SUM: {}, group2_SUM: {}});

  return Array.from(new Set(Object.keys(sums.group1_SUM).concat(Object.keys(sums.group2_SUM)))).map(function(e) {
    return {
      groupName: e, group1_SUM: sums.group1_SUM[e] || 0, group2_SUM: sums.group2_SUM[e] || 0
    }
  });
})(result);

一种方法是创建一个新数组,循环
result
,并将唯一的组推送到该数组中。在您这样做时更新总和。您在这个问题的具体部分遇到了什么问题?您的代码当前是什么样子的?它是如何失败的?@BelowtheRadar,您试图做什么还不清楚。@BelowtheRadar复制并将整个代码片段粘贴到您的控制台中。返回一个由3个对象组成的数组,正如您所要求的那样