在我的 service.component.j 中,我从 http 调用返回一个 Student 数组的可观察对象。学生对象有一个属性叫做年龄,
学生.ts
export class Student {
id: number;
name: string;
age:number;
}
服务.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
)
最佳答案
你可以使用 map
在 Observable 上返回总和。
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 请求。
关于javascript - Angular 2 - 对从可观察对象发送的对象中的属性值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109928/