Ramda - 过滤对象数组 - curried fn参数命令

时间:2017-07-28 12:27:50

标签: javascript arrays filter ramda.js

我想在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

提前致谢!

2 个答案:

答案 0 :(得分:1)

我会用这样的东西:

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

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

答案 1 :(得分:0)

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

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

工具会产生 <?php include("templates/property.html"); ?>

然后你将它转换回javascript以使未来的维护者哭泣。 Demo