javascript - Ramda.js 通过对象值创建过滤函数

标签 javascript func ramda.js

我正在学习 FP 并试图解决这个问题:

我有一个用户列表,需要创建一个函数来按名称过滤它们。这就是我尝试过的:

let users = [{name: "rod"}]

let nameEq = R.prop("name")

let filterByName = R.compose( 
  R.filter(R._, users),
  nameEq
);

filterByName("rod")

这不起作用,因为 filter 返回一个数组。我想我需要以某种方式柯里化(Currying)filter,但无法弄清楚。

最佳答案

如果您正在寻找一种无点的风格,那么这种方法怎么样:

const R = require('ramda');

// sample data
const data = [{name: 'rod', age: 25}, {name: 'chuck', age: 30}, {name: 'rod', age: 50}];


// Alternative 1: bake in the name and vary the data

const filterByName = R.compose(R.filter, R.propEq('name'));

const filterByRod = filterByName('rod');

// now supply the data
filterByRod(data); // => [ { name: 'rod', age: 25 }, { name: 'rod', age: 50 } ]


// Alternative 2: bake in the data, and then vary the name

const filterDataByName = R.compose(R.partialRight(R.filter, [data]), R.propEq('name'));

// now supply the name
filterDataByName('rod'); // => [ { name: 'rod', age: 25 }, { name: 'rod', age: 50 } ]

相信您的目标是在问题中执行上述替代方案 2。

关于javascript - Ramda.js 通过对象值创建过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821407/

相关文章:

javascript - 没有点击,只有悬停在浏览器的移动触摸屏上触发

javascript - 如果子组件的 props 没有改变,React 还会重新渲染它吗?

javascript - 如何随机翻转 Div 的后面然后再前面

c# - 如何声明带有 out 参数的通用委托(delegate)

javascript - 在 ramda 的过滤器上针对多个条件进行测试

javascript - 自动将徽章定位在图像的 Angular 上

c# - 如何创建通用 Func 委托(delegate)

c# - 有没有办法捕获 lambda 表达式,这样它就不会在编译时被迫采用表达式或委托(delegate)类型的身份?

javascript - 使用 Ramda 透镜设置指定对象的结构值

javascript - 如何将这个为每个对象添加键的_.each函数转换为Ramda?