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