2016-05-27 17 views
2

Kann this pointfree erfolgen?Pointfree Join Array zu String, nach Schlüssel in Objekt, in Ramda

var joinByKey = R.curry(function(key, model){ 
    return R.assoc(key, R.join(',' ,R.prop(key, model)), model); 
}); 

var input = { a: ['1', '2', '3'] }; 
var result = joinByKey("a", input); // {"a": "1,2,3"} 
+3

ziemlich jeder Ausdruck kann mit punktfreien Zusammensetzungen dargestellt werden, aber es bedeutet nicht, Sie sollten. Insbesondere hat der 'R.assoc' eine sehr komplexe Funktionssignatur, die es sehr schwierig macht, zu komponieren. Ich verspreche Ihnen, dass die Punkt-freie Notation Ihrer speziellen Funktion, was auch immer es sein mag, Kauderwelsch sein und Ihr Gehirn verletzen wird. Deine Funktion ist lesbar und funktioniert, also behalte es so. – naomik

Antwort

1

Ja, es kann wie folgt geschehen:

const joinByKey = key => R.over(
    R.lensProp(key), 
    R.join(',') 
); 

const input = { a: ['1', '2', '3'] }; 
const result = joinByKey("a")(input); // {"a": "1,2,3"} 

Wenn Sie wollen, es zu benutzen uncurrified:

const joinByKey = R.curry((key, model) => R.over(
    R.lensProp(key), 
    R.join(',') 
)(model)); 

var input = { a: ['1', '2', '3'] }; 
joinByKey("a", input); // {"a": "1,2,3"} 

Die zweite arbeitet sowohl currified oder uncurrified.

Ich finde es besser lesbar als Ihre Version im Gegenteil von dem, was @naomik sagt ...

+0

Super Lösung! Aber ich kann es nicht zur Arbeit bringen. 'result' ist eine' _curry1'-Funktion – tomaj

+0

Sie funktioniert hier: http://ramdajs.com/repl/#?code=const%20joinByKey%20%3D%20key%20%3D%3E%20over%28% 0A% 20% 20LensProp% 28Key% 29% 2C% 0A% 20% 20Join% 28% 27% 2C% 27% 29% 0A% 29% 3B% 0A% 0Avar% 20Einsatz% 20% 3D% 20% 7B% 20a% 3A% 20% 5B% 271% 27% 2C% 20% 272% 27% 2C% 20% 273% 27% 5D% 20% 7D% 3B% 0AjoinByKey% 28% 22a% 22% 29% 28Einsatz% 29% 3B% 20% 2F% 2F% 20% 7B% 22a% 22% 3A% 20% 221% 2C2% 2C3% 22% 7D% 0A – Jalil

+0

Können Sie ein nicht funktionierendes Replikat bereitstellen? – Jalil