2014-09-24 10 views
5

Ho creato questo frammento utilizzando ramda per verificare se esiste un qualsiasi valore dell'array A nell'array B, assumendo che siano array flat.Posso curry questo meglio?

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

Quello che non mi piace è che hard-codedbeta all'interno valueOfArrayInArray. Si può fare diversamente in modo che non lo sia? Si prega di notare che non sto cercando un'implementazione completamente diversa che abbia lo stesso effetto, ma semplicemente per capire meglio come procedere in questo caso.

risposta

6

Si potrebbe applicare parzialmente contains da destra:

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

o ribaltarla:

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

Fantastico, vi ringrazio molto! – rollingBalls

0

Uso vincolante:

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

Grazie per aver risposto! Questa è una soluzione funzionante, ma @elclanrs è più "funzionale", che è quello che sto cercando di ottenere fluente, quindi sto accettando il suo. – rollingBalls