2016-05-27 3 views
2

thisをポイントフリーにすることはできますか?Pointfreeはラムダのオブジェクトのキーで文字列に配列を結合します

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

は、ほとんどすべての表現は、ポイントを含まない組成物で表現することができますが、それは、あなたがしなければならないという意味ではありません。特に、 'R.assoc'は非常に複雑な関数シグネチャを持ち、作成が非常に困難です。私は、あなたの特定の機能のポイントフリーの表​​記法は、どんなものでも、あなたの脳をうんざりして傷つけることを約束します。あなたの関数は読み込み可能であり、動作しますので、そのまま使用してください。 – naomik

答えて

1

はい、それは次のように行うことができます。

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"} 

使用したい場合は、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"} 

秒1はcurrifiedまたはuncurrified両方で動作します。

私は@naomikが言うのは逆に、あなたのバージョンよりも、それはより読みやすい見つける...

+0

恐ろしい解決策!しかし、私はそれを働かせることはできません。 'result'は' _curry1'関数です – tomaj

+0

ここで動作します: http://ramdajs.com/repl/#?code=const%20joinByKey%20%3D%20key%20%3D%3E%20over%28% 0A%20%20%22%29%2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20% 27%2C%20%273%27%5D%20%7D%3B%0AjoinByKey%28%22a%22%29%28%29%3B% 20%2F%2F%20%7B%22A%22%3A%20%221%2C2%2C3%22%7D%0A – Jalil

+0

あなたは機能しないrepl/gistを提供できますか? – Jalil

関連する問題