2016-08-08 42 views
2

過濾功能我學習FP並試圖找出了這一點:Ramda.js通過創建對象值

我有一個用戶列表,需要創建一個函數的名字來過濾。這就是我想:

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

let nameEq = R.prop("name") 

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

filterByName("rod") 

這不起作用,因爲filter返回數組。我想我需要咖啡filter某種方式,但無法弄清楚。

+0

是的,你是v.close--你希望部分應用過濾器,但是自從數據到最後,你可以使用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

已更新回答根據需要提供兩種選擇。 – arcseldon