【问题标题】:AngularJS how to sum data from database in the viewAngularJS如何在视图中汇总数据库中的数据
【发布时间】:2018-06-14 03:10:43
【问题描述】:

我有一张表格,一周中的每一天都有一列,其中我使用 ng-repeat 将那一周在特定项目上的工作时间。

数据是从数据库中提取的。 我遇到的问题是,每个项目都可以有不同的子项目,当这种情况发生时,它们都被放在同一个主项目下的行跨度中,如图所示(“SU”项目有 2 个子项目“ghfgh”和“testtesttest”)。

现在,最后一列中的总小时数也会从数据库中提取出来,其中某个项目在特定周内的所有小时数是总和。 如果一个项目有子项目,我怎么能做到这一点,他们那一周的时间也被汇总在一个行跨度中? (在图片中我放了一个箭头来显示想要的结果)

如果我使用相同的代码为子项目提供行跨度,它会为总列提供正确的行跨度,但显然只显示第一个子项目的小时数(在本例中为“ghfgh”)

<tr ng-repeat="p in vm.presences">
                <td ng-if="p.showProject" rowspan="{{p.projectCount}}">{{p.projectName}}</td>
                <td>{{p.description}}</td>
                <td>{{p.monday}}</td>
                <td>{{p.tuesday}}</td>
                <td>{{p.wednesday}}</td>
                <td>{{p.thursday}}</td>
                <td>{{p.friday}}</td>
                <td>{{p.saturday}}</td>
                <td>{{p.sunday}}</td>
                <td ng-if="p.showProject" rowspan="{{p.projectCount}}">{{p.total}}</td>
            </tr>

用于检查同一项目在给定周内是否有多个条目,将它们分组到同一行跨度的代码是

weeklyPresences.forEach((p, i) => {
                        const differentProject = i === 0 || weeklyPresences[i - 1].projectName !== p.projectName;

                        p.showProject = differentProject;

                        if (differentProject) {
                            p.projectCount = weeklyPresences.filter(pres => pres.projectName === p.projectName).length; 
                        } else {
                            p.projectCount = weeklyPresences[i - 1].projectCount;
                        }                        
                    });

                    return weeklyPresences;

知道如何对子项目的时间进行分组吗?

我正在考虑一些循环来检查一个项目是否有多个条目,如上面的代码,如果没有,则 var 总数保持不变,否则,它会将它们汇总到一个新的 var 中。

【问题讨论】:

  • 你可以使用reduce方法
  • 你能给我举个例子吗?

标签: mysql angularjs database html-table


【解决方案1】:
var arr= [1, 2, 3];
var sum = arr.reduce((a, b) => a + b, 0);
console.log(sum); // 6

【讨论】:

  • 谢谢你的回答,我对 Angular 很陌生,你能解释一下这里发生了什么:var sum = arr.reduce((a, b) => a + b, 0) ;
  • 这是获取数组元素总和的方法。其中 a 和 b 的值根据从第 0 个索引开始的索引变化。您也可以将此方法与对象一起使用。假设您有 person 对象名称和年龄参数,你想要年龄总和。
  • var person = {{name:"gaurav", age:25},{name:"Amit",age:20},{name:"rahul",age:26}} var sum = person.reduce(function(a,b){ return a+b; },0)
  • 所以就我而言,我的数组还有其他数字,但我只想对同一项目的条目的“总”值求和!我可以看到 reduce 函数适用于您只想对其中的所有内容求和的数组,但我需要首先检查是否有多个具有相同项目名称的条目,并且只对它们求和!
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
相关资源
最近更新 更多