我可以更好地咖喱吗?

时间:2014-09-24 19:16:23

标签: javascript functional-programming currying ramda.js

我使用ramda创建了这个代码片段来检查数组B中是否存在数组A的任何值,假设它们是平面数组。

var hasAtLeastOneTruthValue = ramda.contains(true);
var alpha = [1,2,3]
var beta = [4,1,7];

var valueOfArrayInArray = ramda.map(function(a_v){
    return ramda.contains(a_v, beta);
});

console.log(hasAtLeastOneTruthValue(valueOfArrayInArray(alpha)));

我不喜欢的是beta内的硬编码 valueOfArrayInArray。它可以以不同的方式完成,所以它不是吗?请注意,我不是在寻找具有相同效果的完全不同的实现,而只是在这种情况下更好地理解currying。

2 个答案:

答案 0 :(得分:6)

您可以从右侧部分应用contains

var valueOfArrayInArray = R.map(R.rPartial(R.contains, beta))

或翻转它:

var valueOfArrayInArray = R.map(R.flip(R.contains)(beta))

答案 1 :(得分:0)

使用绑定:

var hasAtLeastOneTruthValue = ramda.contains(true);

var alpha = [1,2,3]
var beta = [4,1,7];

function finder(lookup,a_v){
    return ramda.contains(a_v, lookup);
}

var valueOfArrayInArray = ramda.map(finder.bind(null,beta));

console.log(hasAtLeastOneTruthValue(valueOfArrayInArray(alpha)));