Ramda.js 按对象值创建过滤函数
Ramda.js create a filter function by object value
我正在学习 FP 并试图解决这个问题:
我有一个用户列表,需要创建一个函数来按名称过滤它们。这就是我的尝试:
let users = [{name: "rod"}]
let nameEq = R.prop("name")
let filterByName = R.compose(
R.filter(R._, users),
nameEq
);
filterByName("rod")
这不起作用,因为 filter
returns 一个数组。我想我需要以某种方式咖喱 filter
,但无法弄清楚。
如果您正在寻找一种 point free
风格,这种方法如何:
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。
我正在学习 FP 并试图解决这个问题:
我有一个用户列表,需要创建一个函数来按名称过滤它们。这就是我的尝试:
let users = [{name: "rod"}]
let nameEq = R.prop("name")
let filterByName = R.compose(
R.filter(R._, users),
nameEq
);
filterByName("rod")
这不起作用,因为 filter
returns 一个数组。我想我需要以某种方式咖喱 filter
,但无法弄清楚。
如果您正在寻找一种 point free
风格,这种方法如何:
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。