2015-10-27 109 views
0

給出下面的數據結構如何使函數調用多個參數,所以不是F(X)(Y),你可以做F(X,Y)

var categories = [ 
    {_id: 1, order: 0, ancestors: []}, 
    {_id: 2, order: 0, ancestors: [1]}, 
    {_id: 3, order: 0, ancestors: [1]}, 
    {_id: 4, order: 0, ancestors: []}, 
    {_id: 5, order: 0, ancestors: [4]}, 
] 

和功能

var byLevel = R.curry((level) => R.filter(o => o.ancestors.length == level)) 
var levelZero = byLevel(0); 

我想能夠調用這兩種像這樣: -

console.log(byLevel(0,categories)); 
console.log(levelZero(categories)); 

,並獲得相同的結果(兩個類別的陣列與IDS 1和4)

然而byLevel返回一個函數。我可以稱它爲

console.log(byLevel(0)(categories)); 

它做我想要的。但是,如果我寫byLevel,如: -

var byLevel = R.curry((level, l) => R.filter(o => o.ancestors.length == level, l)) 

然後

console.log(byLevel(0,categories)); 

正常工作和咖喱罰款。但是,它似乎不是「乾淨」的。

問題

是否有「Ramda」的方式使它這樣我可以定義函數,這樣我可以做f(x,y)代替​​

+0

你使用_one_參數傳遞給'curry'函數,所以'curry'不能使用_two_參數使它成爲函數。所以這個變體似乎是正常的'R.curry((level,l)=> R.filter(o => o.ancestors.length == level,l))' – Grundy

回答

1

我想這是所有將採取:

var byLevel = R.curry((level, categories) => 
    R.filter(o => o.ancestors.length == level, categories) 
); 

如果你想咖喱一個函數,允許你自己提供參數,你必須讓它們列出。

相關問題