Ramda找到两个不同的嵌套键值

时间:2018-07-03 10:08:53

标签: javascript node.js object npm ramda.js

我是Ramda的新手,有可能在同一对象级别中获得两个不同的键值吗?

我在下面添加了相同的代码:

在这里,列表对象包含用户和员工关键字,我试图实现同时获取用户和员工详细信息。

const R = require('ramda');

var list = [
  {"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
  {"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
];

var getDetails=  R.map(
  R.pipe(
    R.prop('doc'),
    R.pipe(R.path(['Relations', 'users']))
  )
)

getDetails(list);

在我的代码中,我仅使用用户密钥。可以同时获得用户和员工这两个密钥。

当前输出:

[[{"name": "user1"}], undefined]

期望的输出:

[[{"name": "user1"}], [{"name": "user2"}]]

2 个答案:

答案 0 :(得分:2)

与现有解决方案相距不远。

这里可以提供帮助的其他一些功能是:

  • R.pick-将对象转换为仅包含您提供的键(例如usersemployee)。
  • R.values-Ramda的功能等效于Object.prototype.values
  • R.chain-这使您可以映射列表,然后展平嵌套列表。

const list = [
  {"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
  {"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
]

const getDetails = R.chain(R.pipe(
  R.path(['doc', 'Relations']),
  R.pick(['users', 'employee']),
  R.values
))

const result = getDetails(list)

console.log(result)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

答案 1 :(得分:0)

您可以使用ifElseisNil函数:

var getDetails=  R.map(
  R.pipe(
    R.prop("doc"),
    R.pipe(
      R.ifElse(
        R.pipe(R.path(["Relations", "users"]), R.isNil),
        R.path(["Relations", "employee"]),
        R.path(["Relations", "users"])
      )
    )
  )
)