Javascript 各部门总计(不含重复项)
我想计算每个部门的总数,不重复 昨天用户@yBrodsky帮了我,并建议使用SQL,但今天我想添加几个选项,但我不能在SQL中这样做 主要问题: 我有这样一个数组:Javascript 各部门总计(不含重复项),javascript,angularjs,Javascript,Angularjs,我想计算每个部门的总数,不重复 昨天用户@yBrodsky帮了我,并建议使用SQL,但今天我想添加几个选项,但我不能在SQL中这样做 主要问题: 我有这样一个数组: var data = [{ dept:"test", task_time:"83" },{ dept:"test", task_time:"41" },{ dept:"other", task_time:"10" }]; 我想对每个部门的任务时间求和:例如test=124,other=10。 有一个函数应该
var data = [{
dept:"test",
task_time:"83"
},{
dept:"test",
task_time:"41"
},{
dept:"other",
task_time:"10"
}];
我想对每个部门的任务时间求和:例如test=124,other=10。
有一个函数应该计算它,但它的工作原理类似于test=83。测试=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数据=[{
部门:“测试”,
任务时间:“83”
},{
部门:“测试”,
任务时间:“41”
},{
部门:“其他”,
任务时间:“10”
}];
var totalPerDept={};
角度.forEach(数据、功能(项){
如果(!totalPerDept[项目部门]){
totalPerDept[物料部门]=0;
}
totalPerDept[item.dept]+=parseFloat(item.task\u时间);
});
控制台日志(totalPerDept)代码>
我对您的代码做了一些修改,以获得一个具有您想要的结果的数组:
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(){
风险值数据=[{
部门:“测试”,
任务时间:“83”
},{
部门:“测试”,
任务时间:“41”
},{
部门:“其他”,
任务时间:“10”
}];
var totalPerDept=[];
角度.forEach(数据、功能(项){
var索引=findWithAttr(totalPerDept,'dept',item.dept);
如果(指数<0){
全速推进({
部门:项目部,
总计:parseFloat(项目任务时间)
});
}否则{
totalPerDept[index].total+=parseFloat(项.任务\时间);
}
});
返回部门;
}
函数findWithAttr(数组、属性、值){
对于(变量i=0;i
sumDeptData()返回[{“dept”:“test”,“total”:124},{“dept”:“other”,“total”:10}]下面是一个使用纯JavaScript的示例
var数据=[{
部门:“测试”,
任务时间:“83”
}, {
部门:“测试”,
任务时间:“41”
}, {
部门:“其他”,
任务时间:“10”
}],
米纳尔=[];
data.forEach(函数(v){
如果(!本[v.dept]){
这个[部门]={
部门:v.dept,
任务时间:0
};
minArr.push(这个[部门]);
}
this[v.dept].task_time=parseInt(this[v.dept].task_time)+parseInt(v.task_time);
}, {});
控制台日志(minArr)代码>“有一个函数应该计算它,但它的工作原理类似于test=83.test=41和other=10”不,它不是。这正是你说的你想要的。我已经将它复制到一个片段中供您演示。您是否研究过使用数组.prototype.reduce
?等等,您提供的代码正是您想要的。。。“示例测试=124,其他=10”@evolutionxbox:以上都可以。你也可以使用reduce
(尽管有人说如果累加器不改变,这是一种滥用,而不是使用,因为它不会在上面改变)。你的代码很好,根据代码片段,它工作得很好..你的代码可以工作,代码@Javi_Swift也可以工作,但是。。。如果我有来自JSON的数据,看起来像你的数组,它不工作,嗯?它的总价值仅为椭圆形255@NelsonBiggety也许你是在总结字符而不是数字?@Javi_Swift在数据库中是这样的INTEGER@NelsonBiggety您是在客户端(JS)还是在服务器(服务、数据库等)中获得255?如果您在JS控制器中得到这个结果,那么看起来您得到的JSON值是一个字符串,将其ASCII值相加。尝试在求和之前将它们转换为num。在我的代码中,我使用parseFloat函数来完成这个任务。