javascript - 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"}]]
解决方案
您离已有的解决方案不远了。
在这里可以提供帮助的其他一些功能是:
R.pick
- 这会将对象转换为仅包含您提供的键(例如users
,employee
)。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>
推荐阅读
- android - ViewPager onPageSelected 函数在布局初始化之前被触发
- linux - 如何在 Linux 上的文件之间移动映射页面?
- apache-spark - 如果通过 Zeppelin 0.8.1 运行,Spark 作业会在集群上的 df.show() 上挂起
- python - 尝试将卷绑定到 docker 容器
- css - Polymer 3 LitElement PWA 无法使用 css mixin 设置 Polymer Element 样式
- google-cloud-platform - 过去几天二进制日志大幅增长,但行为没有变化
- javascript - 如何在 jquery 选项卡中为 addclass 设置动画?
- javascript - 无法从电子邮件输入中获取值
- javascript - 页面重新加载和执行功能后倒计时重置
- javascript - Electron:如何从焦点窗口中获取选定的文本?