我想在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
提前致谢!
答案 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 filter
和g
为propEq
(. g) . (.) . f
工具会产生 <?php include("templates/property.html"); ?>
然后你将它转换回javascript以使未来的维护者哭泣。 Demo