2016-08-08 2 views
2

によるフィルタ機能を作成します。それは私が試したものです:Ramda.jsは、私はFPを学習し、これを理解しようとしているオブジェクトの値

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

let nameEq = R.prop("name") 

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

filterByName("rod") 

filterは、配列を返すので、これは動作しません。私はカレーにする必要があると思いますfilter何らかの方法で、それを把握することはできません。

+0

はい、あなたは部分的にフィルタを適用したいと思いますが、データが最後に来るので、R.partialRightを使用できます - http://ramdajs.com/0.22.1/docs/#partialRight – arcseldon

答えて

3

あなたはどのようにこのアプローチについては、スタイルの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の代替を行うことを目指したと信じています。

+0

答えが更新されました必要に応じて2つの選択肢を提供する。 – arcseldon

関連する問題