2015-10-27 117 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) 
); 

如果你想咖喱一个函数,允许你自己提供参数,你必须让它们列出。

相关问题