2017-05-31 2 views
1

Ich versuche, diese pointful FunktionWie mit 2+ Parametern Funktion in Punkt-freien Art schreiben

const getItem = (items, id) => items.find(item => item.id === id); 

in Punkt-freien Stil mit ramda.js zu implementieren.

Wenn ich so etwas wie dieses:

const getItem = find(propEq('id')); 

den ersten Parameter items wird find Funktion übergeben werden, aber wir werden 2. id Parameter verlieren.

Die Frage ist, wie getItem Funktion in Point-free-Stil zu implementieren?

Antwort

3

Wenn Sie frei sind, um die Reihenfolge der Argumente der Funktion zu ändern, ist useWith eine einfache Lösung:

const getItemById = R.useWith(
 
    R.find, 
 
    [R.propEq('id')] 
 
); 
 

 
console.log(
 
    getItemById(
 
    'b', 
 
    [{ id: 'a' }, { id: 'b' }] 
 
) 
 
);
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.24.0/ramda.min.js"></script>

+3

Und wenn Sie den ursprünglichen Parameter halten möchten, können Sie ändern dies zu 'R.useWith (R.flip (R.find), [R.identität, R.propEq ('id')])'. Aber zu diesem Zeitpunkt ist das Lambda wahrscheinlich sauberer. –