2017-03-29 17 views
1

私はオブジェクトの配列をHTTPレスポンスとして取得しています。オブジェクトの値でそれらをグループ化しようとしています。どのようにしてHTTP応答にグループ化できますか?

[ 
{player: 'Jordy Nelson', team: 'Packers'}, 
{player: 'Aaron Rogers', team: 'Packers'}, 
{player: 'Dak Prescott', team: 'Cowboys'}, 
{player: 'Ezekiel Elliot', team: 'Cowboys'}, 
{player: 'Joe Flacco', team: 'Ravens'}, 
{player: 'Julio Jones', team: 'Falcons'}, 
] 

私は私が試した

[ 
{'Packers': 
    [ 
    {player: 'Jordy Nelson', team: 'Packers'}, 
    {player: 'Aaron Rogers', team: 'Packers'} 
    ] 
}, 
{'Cowboys': 
    [ 
    {player: 'Dak Prescott', team: 'Cowboys'}, 
    {player: 'Ezekiel Elliot', team: 'Cowboys'} 
    ] 
}, 
{'Ravens': 
    [ 
    {player: 'Joe Flacco', team: 'Ravens'} 
    ] 
}, 
{'Falcons': 
    [ 
    {player: 'Julio Jones', team: 'Falcons'} 
    ] 
} 
] 

オブジェクトの配列を含む、その応答を取得し、オブジェクトの配列に変換しようとしている。一例としては、のは、以下の私が手にしましょう他のSOポスト

return this.http 
    .get(`${environment.baseUrl}/players`, options) 
    .map(res => res.json()) 
    .groupBy(
    res => res.team, 
    res => res // I've also tried removing this, filtering and flatmap 
) 
    .flatMap(teams => {return teams}) 

で述べたようにGROUPBYを使用しかし、軸1がそうのような単一のオブジェクトである2D配列を返し:

[ 
    [ 
    {'Packers': {player: 'Jordy Nelson', team: 'Packers'} 
    ], 
    [ 
    {'Packers': {player: 'Aaron Rogers', team: 'Packers'} 
    ] 
] 

私の応答を正しくフォーマットするために必要なことは何ですか?ありがとう!

@coderek答えの助けを借りて、私は動的にHTTPレスポンスを再編成できる小さな関数を書いています(あなたは別のキーでグループ化するときにAPIをヒットしません)。他の誰かがこの問題に遭遇した場合、redditの投稿があります。https://www.reddit.com/r/Angular2/comments/629nfg/how_to_dynamically_group_a_http_response/

+0

これは重複して質問です:、http://stackoverflow.com/questions/14800862/how-can-i-group-data-with-an-angular-filter – Arvindsinc2

+0

@それはAngularJSだArvindsinc2をチェックアウトしません角度。また、それはテンプレート内にあり、コンポーネント内でこれを実行しようとしています。私はアンダースコアがあることを知っていましたが、RXJSを使用するのは可能です(私はちょうどそれをやっていないようです) –

答えて

3

GroupByがストリームで動作します。だから まず、配列の代わりにソースを最初に変換する必要があります。 第2に、グループ結果をストリームで取得します。これは、観察可能な仕組みです。

this.http.get('api/players') 
    .mergeMap(a=> a.json().data) 
    .groupBy(
     a=>a.team, 
     a=>a, 
) 
    .subscribe(
    (obs) =>{ 
     obs.subscribe((a)=>{ 
      console.log(a, obs.key); 
     }); 
    } 
) 
} 
+0

ありがとう!私は別のAngularビルドを持っているので、レスポンスに応じて、他の人のためのメモ(またはa => a.json()。data)ではなくmergeMap(a => a.json())となります。 –

関連する問題