【问题标题】:Ramda - filtering array of objects - curried fn parameters orderRamda - 过滤对象数组 - curried fn 参数顺序
【发布时间】:2017-07-28 23:10:54
【问题描述】:

我想在 ramda.js 中实现过滤函数生成器。在我看来,它应该这样工作:

var a = filterFn(arrOfObjects)
var b = a(keyName)
var c = b(value)

实现这种参数顺序非常重要,因为可以使用不同的条件过滤相同的数组。

目前我有以下代码:

var g = R.curryN(2, R.compose(R.filter(R.__)(R.__), R.propEq))
g('classId')(2)(input)

但我想将“输入”作为第一个参数:

g(input)('classId')(1)

这是一个 ramda REPL:code

提前致谢!

【问题讨论】:

    标签: javascript arrays filter ramda.js


    【解决方案1】:

    我会使用这样的东西:

    R.curry((list, name, value) => R.filter(R.propEq(name, value), list));
    

    Ramda 不包含任意参数重新排序机制,仅包含 flip__ placeholder

    【讨论】:

      【解决方案2】:

      你真的不希望这个函数是无点的:)

      var g = R.compose(
        R.curryN(2, R.compose)(R.__, R.propEq),
        R.curryN(2, R.compose),
        R.flip(R.filter)
      )
      

      或者至少确保未来的维护者永远不会知道你住在哪里:)

      如何得到像这样可怕的东西。

      首先,您要编写功能明确的版本。

      list => prop => value => R.filter(R.propEq(prop)(value))(list)
      

      list => prop => value = R.flip(R.filter)(list)(R.propEq(prop)(value))
      

      然后转到Pointfree.io 并使用一些haskell 语法\x y z -> f x (g y z)。其中f 如果flip filtergpropEq

      工具会产生(. g) . (.) . f

      然后你把它转换回 javascript 让未来的维护者哭泣。 Demo.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 2020-06-28
        • 1970-01-01
        • 2019-09-21
        • 2018-10-14
        • 2020-02-29
        • 2015-10-20
        相关资源
        最近更新 更多