2017-10-15 2 views
1

Ich habe eine Funktion, die zwei Argumente, ich möchte es curry, weil es mehr als einmal im Code verwendet. hier ist die Funktion:kombinieren Funktionen in ramda

const discount = R.sum(R.map(R.propOr('0', 'discount'), invoiceArr)); 

jetzt ich das Argument geben will ('discount' & invoiceArr) und den Wert zurück. Ich versuche, einen anderen Weg, die wie unten:

const sumByPropName = R.curryN(2, R.compose(R.sum, R.pluck)); 

aber auf diese Weise nicht propOr Methode hat.

Antwort

1

Es gibt eine Reihe von Möglichkeiten, wie Sie das erreichen können. Angenommen, Sie sind nach wie vor die Funktion curried wollen, ist der einfachste Weg, um nur die Argumente machen hinzufügen

const sumByPropName = R.curry((prop, items) => R.compose(R.sum, R.map(R.propOr(0, prop)))(items)) 

Eine Alternative ist R.defaultTo zu verwenden, um über die undefinierten Werte abzubilden und setzen sie alle zu 0, bevor sie vorbei sum

const sumByPropName = R.curryN(2, R.compose(R.sum, R.map(R.defaultTo(0)), R.pluck)) 

Schließlich könnten Sie eine pluckOr Funktion selbst erstellen sumByPropName ein bisschen sauberer zu halten (obwohl es sicherlich eine schönere Art und Weise pluckOr zu schreiben)

const pluckOr = R.curry((defaultVal, propName, items) => R.map(R.propOr(defaultVal, propName), items)) 
const sumByPropName = R.curryN(2, R.compose(R.sum, pluckOr(0)))