Ramda的无点样式大写功能

时间:2016-10-13 03:19:06

标签: javascript pointfree ramda.js

虽然写一个大写函数是微不足道的,但是:

“你好”=> “你好” “你好”=> “你好”

如何使用Ramda JS使用无点样式编写它?

https://en.wikipedia.org/wiki/Tacit_programming

4 个答案:

答案 0 :(得分:12)

会是这样的:

const capitalize = R.compose(
    R.join(''),
    R.juxt([R.compose(R.toUpper, R.head), R.tail])
);

Demo(在ramdajs.com REPL中)。

处理null值的小修改

const capitalize = R.compose(
    R.join(''),
    R.juxt([R.compose(R.toUpper, R.head), R.tail])
);

const capitalizeOrNull = R.ifElse(R.equals(null), R.identity, capitalize);

答案 1 :(得分:11)

您可以将replace部分应用于在第一个字符上运行toUpper的正则表达式:

const capitalize = R.replace(/^./, R.toUpper);

答案 2 :(得分:6)

我建议使用R.lens

const char0 = R.lens(R.head, R.useWith(R.concat, [R.identity, R.tail]));

R.over(char0, R.toUpper, 'ramda');
// => 'Ramda'

答案 3 :(得分:2)

我为有兴趣的人准备了一些快速而肮脏的基准。看起来@ lax4mike是提供答案中最快的(尽管更简单,非无点str[0].toUpperCase() + str.slice(1)更快[并且也不是OP所要求的,所以这没有实际意义]。

https://jsfiddle.net/960q1e31/(你需要打开控制台并运行小提琴才能看到结果)