首页 > 解决方案 > 如何使用 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 点免费的最佳方法是什么?

标签: javascriptfunctional-programmingramda.jspointfree

解决方案


我认为你真的需要问为什么你想要这个免费的。如果这只是一个学习练习,那么 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),这可能会或可能不会被您接受。


推荐阅读