2016-05-09 4 views
4

service.component.j httpコールからStudentの配列のオブザーバブルを返します。学生オブジェクトはAngular2 - オブザーバブルから送信されたオブジェクト内のプロパティの値を合計します。

student.ts観測可能にオブザーバーであるstudentManagement.component.ts

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

service.componnet.js

getStudents(): Observable< Student[]> 

、年齢というプロパティを持っています上記のように、私は学生の年齢を合計したい。私はソース(これは、ID、名前、個人年齢などのページ内の生徒の他の情報も表示する必要があるのであまり好ましくない)にsum()を入れたり、_studentListから計算したりすることができます。これらの2つの他に、他の方法ですか?

private _studentList:Student[]=[]; 

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

コードを追加してください。私はあなたが合計したいものと、あなたが合計の外に得たい結果を見ません。 –

+0

更新ありがとうございます。 – Hammer

答えて

6

あなたは合計を返すために観察可能に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)); 
} 

我々が観察が熱くなり、二回HTTPリクエストをしないように、ここでのシェアを呼び出す必要があります。

+0

getStudents()を一度呼び出してすべての生徒を表示し、年齢を合計するソリューションはありますか? – Hammer

+0

もちろん、上記のコードを別の関数にラップし、オリジナルのObservableで 'share()'を呼び出すだけです。 :) –

+0

Tks。これはただ1つのhttp要求でうまくいくように見えます。 – Hammer

1

学生リストと年齢合計の両方を返すmap関数を使用できます。次のようなものがあります。

studentsObservable.map((students) => { 
    return { 
    ages: this.getAge(students), 
    students: students 
    }; 
}); 
関連する問題