4

私のservice.component.jsでは、http 呼び出しから Student の配列のオブザーバブルを返します。Student オブジェクトには age というプロパティがあり、

生徒.ts

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

service.componnet.js

getStudents (): Observable< Student[]> 

上記のオブザーバブルに対するオブザーバーであるstudentManagement.component.tsでは、学生の年齢を合計したいと考えています。私はソースに sum() を入れることができることを知っています (ID、名前、個人の年齢など、学生の他の情報もページに表示する必要があるため、これはあまり好ましくありません)。または _studentList から計算します。この2つ以外に方法はありますか?

private _studentList:Student[]=[];

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

2 に答える 2

6

mapObservable で使用して合計を返すことができます。

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

ここでは、内側の配列を学生の age プロパティの合計に減らします。これ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));
}

Observable がホットになり、HTTP リクエストを 2 回実行しないように、ここで share を呼び出す必要があります。

于 2016-05-09T07:29:14.580 に答える
1

map生徒のリストと年齢の合計の両方を返す関数を使用できます。そんな感じ:

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