Ramda的无点样式大写功能

Tut*_*men 10 javascript pointfree ramda.js

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

"你好"=>"你好""你好"=>"你好"

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

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

zer*_*kms 12

它会是这样的:

const capitalize = R.compose(
    R.join(''),
    R.juxt([R.compose(R.toUpper, R.head), R.tail])
);
Run Code Online (Sandbox Code Playgroud)

演示(在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);
Run Code Online (Sandbox Code Playgroud)

  • `ifElse` +`identity`组合可以用更可读的`除非`函数替换:`const capitalizeIfNotNil = R.unless(R.isNil,capitalize);` (2认同)

lax*_*ike 11

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

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

  • 对所提供的答案进行一些快速而肮脏的基准测试,而你的答案是最快的. (2认同)

dav*_*ers 6

我建议使用R.lens:

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

R.over(char0, R.toUpper, 'ramda');
// => 'Ramda'
Run Code Online (Sandbox Code Playgroud)