总和取决于每个部门没有重复

时间:2017-03-10 10:05:03

标签: javascript angularjs

我想根据每个部门的总和而不重复。

昨天用户@yBrodsky帮助我并建议使用SQL,但今天我想添加几个选项,我不能在sql中这样做。

主要问题:

我有一个像:

这样的数组
var data = [{
  dept:"test",
  task_time:"83"
},{
  dept:"test",
  task_time:"41"
},{
  dept:"other",
  task_time:"10"
}];

我想为每个部门总结task_time:例如test = 124和其他= 10。 有一个函数应该计算它,但它的工作方式类似于test = 83.test = 41和其他= 10.并且显示每个部门而不是一个部分。

有功能。

var totalPerDept = {};
angular.forEach(data, function(item) {
  if(!totalPerDept[item.dept]) {
    totalPerDept[item.dept] = 0;
  }
  totalPerDept[item.dept] += parseFloat(item.task_time);
});

以上是一个片段:



var data = [{
  dept:"test",
  task_time:"83"
},{
  dept:"test",
  task_time:"41"
},{
  dept:"other",
  task_time:"10"
}];

var totalPerDept = {};
angular.forEach(data, function(item) {
  if(!totalPerDept[item.dept]) {
    totalPerDept[item.dept] = 0;
  }
  totalPerDept[item.dept] += parseFloat(item.task_time);
});
console.log(totalPerDept);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

我对您的代码进行了一些修改,以获得具有您想要结果的数组:

     function sumDeptData() {
        var data = [{
              dept:"test",
              task_time:"83"
            },{
              dept:"test",
              task_time:"41"
            },{
              dept:"other",
              task_time:"10"
            }];

        var totalPerDept = [];

        angular.forEach(data, function(item) {
            var index = findWithAttr(totalPerDept, 'dept', item.dept);

            if (index < 0) {
                totalPerDept.push({
                    dept: item.dept,
                    total: parseFloat(item.task_time)
                });
            } else {
                totalPerDept[index].total += parseFloat(item.task_time);
            }
        });

        return totalPerDept;
    }

    function findWithAttr(array, attr, value) {
        for(var i = 0; i < array.length; i += 1) {
            if(array[i][attr] === value) {
                return i;
            }
        }
        return -1;
    }

sumDeptData()返回[{“dept”:“test”,“total”:124},{“dept”:“other”,“total”:10}]

答案 1 :(得分:0)

以下是使用Plain JavaScript的示例。

&#13;
&#13;
var data = [{
    dept: "test",
    task_time: "83"
  }, {
    dept: "test",
    task_time: "41"
  }, {
    dept: "other",
    task_time: "10"
  }],
  minArr = [];

data.forEach(function(v) {
  if (!this[v.dept]) {
    this[v.dept] = {
      dept: v.dept,
      task_time: 0
    };
    minArr.push(this[v.dept]);
  }
  this[v.dept].task_time = parseInt(this[v.dept].task_time) + parseInt(v.task_time);
}, {});

console.log(minArr);
&#13;
&#13;
&#13;