首页 > 解决方案 > Ramda 找到两个不同的嵌套键值

问题描述

我是这个 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"}]]

标签: javascriptnode.jsobjectnpmramda.js

解决方案


您离已有的解决方案不远了。

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

  • 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>


推荐阅读