如何使以下功能无点(使用Ramda)?
const prefixAll = R.curry((prefix, list) => R.map(R.concat(prefix), list))
答案 0 :(得分:7)
此外,这应该工作
R.useWith(R.map, [R.concat, R.identity])
P.S:但我个人认为,(
R.identity
是函数的正确性,请参阅@ scott-sauyet的评论。)
compose
更好 - 使用论证的部分应用是更具功能性的方法。例如R.compose(R.map, R.concat)('a')(['a','b'])
答案 1 :(得分:2)
我将代码输入pointfree.io(我首先将其转换为Haskell \prefix list -> map (prefix ++) list
),然后返回:
map . (++)
所以JavaScript等价物应该是:
const prefixAll = R.compose(R.map, R.concat);
当我在ramda's REPL中测试时,我认为我获得了所需的结果。
答案 2 :(得分:0)
IMO最简单的方法是使用在这种情况下通过R.lift解除R.concat函数来实现的理解。
const prefixAll = R.lift(R.concat);
prefixAll(['hi-'], ['you', 'there']); // => ["hi-you", "hi-there"]
请注意,前缀必须作为单元素数组传递。 Ramda会为您自动调整此功能。