在我的 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
答案 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
};
});