4

在我的service.component.j中,我从 http 调用返回一个可观察的 Student 数组。学生对象有一个叫做年龄的属性,

学生.ts

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

service.componnet.js

getStudents (): Observable< Student[]> 

在作为上述观察者的观察者的studentManagement.component.ts中,我想总结学生的年龄。我知道我可以将 sum() 放在源中(这不是首选,因为我还需要在页面中显示学生的其他信息,例如 ID、姓名、个人年龄。)或从 _studentList 计算它。除了这两个,还有什么办法吗?

private _studentList:Student[]=[];

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

2 回答 2

6

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

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

在这里,我们将内部数组简化为学生年龄属性的总和。现在我们拥有的是 a 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 请求。

于 2016-05-09T07:29:14.580 回答
1

您可以使用map返回学生列表和年龄总和的函数。像这样的东西:

studentsObservable.map((students) => {
  return {
    ages: this.getAge(students),
    students: students
  };
});
于 2016-05-09T07:41:30.947 回答