【问题标题】:Pointfree Join Array to String, by key in object, in Ramda在 Ramda 中,通过对象中的键,Pointfree 将数组连接到字符串
【发布时间】:2016-09-14 17:15:02
【问题描述】:

this 可以免积分吗?

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

【问题讨论】:

  • 几乎每个表达式都可以用无点组合来表示,但这并不意味着你应该这样做。特别是,R.assoc 具有非常复杂的函数签名,这使得编写起来非常困难。我向您保证,您的特定功能的无点符号,无论它是什么,都会是胡言乱语并伤害您的大脑。您的函数可读且有效,因此请保持这种状态。

标签: javascript functional-programming pointfree ramda.js


【解决方案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"}

如果你想使用它,那么:

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

第二个无论是currified还是uncurrified都有效。

我发现它比你的版本更具可读性,这与 @naomik 所说的相反......

【讨论】:

  • 很棒的解决方案!但我无法让它工作。 result 是一个_curry1-函数
  • 它在这里工作:ramdajs.com/repl/…
  • joinByKey("a", input);joinByKey("a")(input)之间好像有区别
  • 你是对的......我编辑了我的答案以包括 currified 和 uncurrified 版本
  • 这仍然更具可读性,恕我直言......这是目标吗?
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 2021-08-03
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多