如何在HTTP响应上进行groupBy?

时间:2017-03-29 14:29:48

标签: angular rxjs

我将一个对象数组作为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帖子中提到的方式使用groupBy

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})

但是它返回一个2d数组,其中轴1是一个单个对象,如下所示:

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

我需要做什么才能正确格式化我的回复?谢谢!

在@coderek回答的帮助下,我编写了一个可以动态重新组合HTTP响应的小功能(因此,每当您想要在不同的密钥上进行groupBy时,您都不会触及API) 。如果有其他人遇到此问题https://www.reddit.com/r/Angular2/comments/629nfg/how_to_dynamically_group_a_http_response/

,请点击reddit上的帖子

1 个答案:

答案 0 :(得分:3)

<spring:message code="${error.code}" arguments="${error.arguments}" text="${error.defaultMessage}"/> 适用于流。所以 首先,您需要先将源转换为流而不是数组。 其次,您可以按流获取组结果,这就是可观察的工作方式。

GroupBy