javascript - 如何使用 Ramda 按值进行无点数组搜索
问题描述
const documents = [
{
mode: 'a',
},
{
mode: 'b',
}
]
const getMode = R.propEq('mode')
const findInDocuments = (filter) => R.find(filter, documents) // <-- 1
const findByModeInDocuments = (mode) => findInDocuments(getMode(mode)) // <-- 2
findByModeInDocuments('b')
使功能 1 和 2 点免费的最佳方法是什么?
解决方案
我认为你真的需要问为什么你想要这个免费的。如果这只是一个学习练习,那么 hitmand 有一个相当标准的——而且非常好——Ramda 的答案。但我建议,一般来说,无点只有在提高可读性的情况下才有用。这对我来说更具可读性:
const findByMode = curry ((xs, mode) => find (propEq ('mode', mode), xs))
const documents = [{mode: 'a'}, {mode: 'b'}]
console .log (
findByMode (documents) ('b')
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script>const {curry, find, propEq} = R </script>
如果你想要findByModeInDocuments
(更好地命名findDocumentsByMode
?),只需部分应用于documents
该功能。
这当然不是无意义的,但我发现它比useWith
解决方案更容易阅读。来自 codeepic 的解决方案更容易,尽管这涉及将签名从findByMode (documents) ('b')
to更改findByMode ('b') (documents)
,这可能会或可能不会被您接受。
推荐阅读
- reactjs - 基于锚点的 React Web 导航
- java - 了解实现
- python - Python - 对可调用和构造函数感到困惑
- azure - 如何用天蓝色连接字符串覆盖本地连接字符串
- android - TextView 在从不同的活动中获取 Intent 时显示相同的文本
- css - Webpack Dev 与 Prod 的样式差异
- mysql - 选择带有存储过程的查询
- angular - Angular 6 与 AWS ElasticSearch 连接
- selenium - TestNg DataProvider 没有同时运行所有测试,而是作为批处理
- tensorflow - 在 tensorflow js 中重新训练图像分类器