Angular 2 - 对从可观察对象发送的对象中的 属性 的值求和

Angular2 - sum the values of a property in the Object sent from an observerable

在我的 service.component.js 我 return 来自 http 调用的 Student 数组的可观察值。学生对象有一个 属性 称为年龄,

student.ts

export class Student {
  id: number;
  name: string;
  age:number;
}

service.componnet.js

getStudents (): Observable< Student[]> 

studentManagement.component.ts上面observable的observer中,想求和学生的年龄。我知道我可以在源代码中放置一个 sum() (这是不太受欢迎的,因为我还需要在页面中显示学生的其他信息,例如 id、姓名、个人年龄。)或从 _studentList 计算它。除了这两个,还有别的办法吗?

private _studentList:Student[]=[];

    .subscribe(
            returnedStudents => {
              console.log(returnedStudents);
              this._studentList = returnedStudents;
            },
            erroMsg => this._errorMessage = erroMsg
          ) 

您可以在 Observable 上使用 map 来 return 总和。

getStudents().map(arr => arr.reduce((a, b) => a + b.age, 0));

这里我们将内部数组缩减为学生年龄 属性 的总和。现在我们有一个 Observable<number>,它将发出年龄总和。

如果你想同时显示:

getStudents (): Observable< Student[]> {
   return this.http.get(/*...*/).share();
}

getAgeSum(): Observable<number> {
    return this.studentsObservable
       .map(arr => arr.reduce((a, b) => a + b.age, 0));
}

我们这里要调用share,这样Observable就变热了,不会做两次HTTP Request。

您可以使用 map 函数来 returns 学生列表和年龄总和。类似的东西:

studentsObservable.map((students) => {
  return {
    ages: this.getAge(students),
    students: students
  };
});