我希望实现尽可能通用和功能性(如在函数式编程中),但一般来说,我期待一个具有以下结构的 json 对象:
[
{
id: number,
prop1: string,
prop2: number,
prop3: string,
...,
propN: string
},
...
]
(基本上,一个包含 N 个属性的对象数组,一些映射到字符串,另一些映射到数字)
我正在尝试实现一组通用功能,以便能够为此实现一些目标:
var filteredResult = filter(by(property, value, lt\gt\eq\contains), collection);
基本上,我想返回一个具有相同对象结构的数组,由我传递给 by() 的属性字符串过滤,以及值(字符串或数字)和我想要的比较类型去表演。
一般来说,对于数字,我希望能够过滤属性值大于/小于/在我传递的值范围内的结果,使用字符串或字符串数组,我想知道属性是否value 包含我传入 by() 的值。
由于我是 FP 的新手,我正在努力格式化我的代码以利用 Ramda 提供的自动柯里化,并且在传递我想要的参数时我在编写不同的函数时遇到了麻烦。
例如,我写了这个函数:
var byProperty = function(p) {return R.useWith(R.filter, R.propEq(p), R.identity)};
但是当我尝试像这样使用它时:
var property = 'prop1', value = 15;
console.log( byProperty( property, value, collection ) );
我得到一个函数而不是过滤后的数组。
我知道我在这里遗漏了一些微不足道的东西,但是我很难理解在 Ramda 中传递值和函数的方式。