路径结合过滤器 - 使用 Ramda

path combined with filter - with Ramda

我正在从一个 API 查询数据,它具有我需要访问的嵌套对象属性。

const players = teamsData && teamsData.team && teamsData.team.players;

我正在使用 path 获取此数据。

const players = path(['team', 'players'], teamsData);

这有效,但是当我与过滤器结合使用时出现错误。

理想情况下,我想使用 pipe 并将其与 Ramda 的 filter 方法结合使用。

我的代码如下所示:

const injuredPlayers = pipe(
   path(['team', 'players'], teamsData),
   filter(player => player.isInjured)
);

看起来玩家变量确实等于

const players = path(['team', 'players'], teamsData);

至少从你写的代码来看

如果没问题就继续这里

起初我更愿意使用 pathOr 而不是看起来像这样

const pathTeamPlayers = R.pathOr([], ['team', 'players']);
const isInjured = player => player.injured
const filterInjured = R.filter(isInjured)

const teamDataToInjuredPlayers = R.pipe(
  pathTeamPlayers,
  filterInjured,
);

/* result */


teamDataToInjuredPlayers(teamData)

如果你只是想要受伤球员的名单,你可以这样写

const injuredPlayers = 
  filter (player => player.isInjured) (path (['team', 'players'], teamsData)

如果您想要一个 函数 teamsData 检索该信息,那么您可以写

const getInjuredPlayers = pipe (
  path('[team', 'players']), 
  filter (prop ('isInjured'))
)

(或使用 pathOr[] 来提高可靠性)并用

调用它
const injuredPlayers = getInjuredPlayers (teamData)

您的代码结合了这两种截然不同的样式。