Angular2 - 对可观察对象发送的Object中的属性值求和

时间:2016-05-09 07:26:03

标签: javascript typescript angular rxjs rxjs5

在我的 service.component.j 中,我从http调用中返回一个Student数组的observable。 Student对象有一个名为age的属性,

student.ts

clone()

service.componnet.js

throws CloneNotSupportedException

studentManagement.component.ts 中,它是上述观察者的观察者,我想总结一下学生的年龄。我知道我可以将sum()放在源代码中(这是不太优选的,因为我还需要在页面中显示学生的其他信息,例如id,name,个别年龄。)或者从_studentList计算它。除了这两个,还有其他方式吗?

throws CloneNotSupportedException

2 个答案:

答案 0 :(得分:6)

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

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请求。

答案 1 :(得分:1)

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

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