rollingBalls
rollingBalls

Reputation: 1878

Can I curry this better?

I've made this snippet using ramda to check if any value of array A exists in array B, assuming they are flat arrays.

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)));

What I do not like is that hardcoded beta inside valueOfArrayInArray. Can it be done differently so that it's not? Please note that I'm not looking for a completely different implementation that has the same effect, but simply to understand currying better in this case.

Upvotes: 5

Views: 292

Answers (2)

elclanrs
elclanrs

Reputation: 94121

You could partially apply contains from the right:

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

Or flip it:

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

Upvotes: 6

Andrija Petrovic
Andrija Petrovic

Reputation: 209

Use binding:

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)));

Upvotes: 0

Related Questions