首页 > 解决方案 > Angular 2合并相同的变量号

问题描述

我从这样的数据库中获取数字:

    getTeamPoints(team) {
console.log(team);
         let a = (<any>Object).values(team.tasks).reduce((total, entry) => total + entry.pt, 0);
        console.log('a = ',a)
    }

对于number我得到的每个value(仅示例不是真实值):

a = 10;
a = 15;
a = 20;
a = 5;
a = 0;

merge那些anumber是 -的人怎么10+15+20+5+0 = 50样?

编辑:console.log(团队):

{"members":{"-LT8U_zn5T9HuSlh03lw":{"name":"Andrius"}},"name":"Frontas","tasks":{"-LT8UbPIJMrR52P4hvHJ":{"name":"Jobas","pt":5},"-LT8UcOAvqPk_o3fUl7y":{"name":"Jobas2","pt":5}}}

{"members":{"-LT8UenQm-WzElOQhIrX":{"name":"Tomas"}},"name":"Backas","tasks":{"-LT8UfmIezqiMDv3WCpA":{"name":"Jobas3","pt":5}}}

{"members":{"-LT986cZrN6Q1sqIjMZF":{"name":"AAA"}},"name":"Tetas","tasks":{"-LT988EvCySLOutd5AVK":{"done":true,"name":"Jobas","pt":15},"-LT989cIEqr4ObqNyfiA":{"done":false,"name":"XX","pt":16}}}

编辑:循环团队:

<mat-card-content *ngFor="let team of objectValues(project[2])>
    <h2 class="right-text">{{getTeamPoints(team)}}%</h2>
</mat-card-content>

编辑:objectValues 函数:

  objectValues(obj) { 
if(obj){
  return Object.values(obj); 
}

控制台日志(团队):

["teams",{"members":{"-LT8U_zn5T9HuSlh03lw":{"name":"Andrius"}},"name":"Frontas","tasks":{"-LT8UbPIJMrR52P4hvHJ":{"name":"Jobas","pt":5},"-LT8UcOAvqPk_o3fUl7y":{"name":"Jobas2","pt":5}}},{"members":{"-LT8UenQm-WzElOQhIrX":{"name":"Tomas"}},"name":"Backas","tasks":{"-LT8UfmIezqiMDv3WCpA":{"name":"Jobas3","pt":5}}},{"members":{"-LT986cZrN6Q1sqIjMZF":{"name":"AAA"}},"name":"Tetas","tasks":{"-LT988EvCySLOutd5AVK":{"done":true,"name":"Jobas","pt":15},"-LT989cIEqr4ObqNyfiA":{"done":false,"name":"XX","pt":16}}}]

标签: javascriptangulartypescript

解决方案


像这样更改您的组件:

<mat-card-content>
    <h2 class="right-text">
        {{ getProjectTeamsTotalPoints(objectValues(project[2])) }}
    </h2>
</mat-card-content>

并在您的课程中添加此方法:

getProjectTeamsTotalPoints(teams): number {
    return teams.reduce((total, team) => {
        if (!team || !team.tasks) {
            return total;
        }
        return Object.values(team.tasks).reduce((pts, task) => {
            return pts + task.pt;
        }, total);
    }, 0);
}

还要更新您的 objectValues 函数以始终返回一个数组:

objectValues(obj) {
    return Object.values(obj || {});
}

基本上,您减少团队并为每个团队减少他们的分数,这样您就可以获得项目的总摘要。


推荐阅读