Javascript 带Ramda的无点式大写函数

Javascript 带Ramda的无点式大写函数,javascript,pointfree,ramda.js,Javascript,Pointfree,Ramda.js,编写大写函数非常简单,例如: “你好”=>“你好” “你好”=>“你好” 如何使用Ramda JS使用无点风格编写它 应该是这样的: const capitalize = R.compose( R.join(''), R.juxt([R.compose(R.toUpper, R.head), R.tail]) ); (在ramdajs.com REPL中) 以及对处理null值的轻微修改 const capitalize = R.compose( R.join(''),

编写大写函数非常简单,例如:

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

如何使用Ramda JS使用无点风格编写它


应该是这样的:

const capitalize = R.compose(
    R.join(''),
    R.juxt([R.compose(R.toUpper, R.head), R.tail])
);
(在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);
我建议使用:


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


const大写=R.replace(/^./,R.toUpper)

我为任何感兴趣的人准备了一些快速而肮脏的基准测试。看起来@lax4mike是提供的答案中最快的(尽管更简单、无点的
str[0]。toUpperCase()+str.slice(1)
要快得多[而且也不是OP想要的,所以这是毫无意义的])


(您需要打开控制台并运行fiddle以查看结果)

对于达到此目的的任何人,如果要寻找首字母大写,其余字母小写的解决方案,请参见:

const capitalize = R.compose(R.toUpper, R.head);
const lowercaseTail = R.compose(R.toLower, R.tail);
const toTitle = R.converge(R.concat, [capitalize, lowercaseTail]);

toTitle('rAmdA');
// -> 'Ramda'

作为后续问题,在以无点风格写作时,您将如何处理空案例?如果这个函数是用大写(null)调用的,它会爆炸。@TutanRamen用
ifElse(等于(null)、identity、
)作为它的前缀,否则我认为
可能会在这里使用
monad。太棒了!甚至可以用
isNil
代替
equals(null)
现在!如果
ifElse
+
identity
组合可以替换为可读性更好的
,除非
函数:
const capitalizeIfNotNil=R.inspect(R.isNil,大写);
在提供的答案上运行了一些快速而肮脏的基准测试,而您的基准测试速度最快。
替换的第二个参数是一个字符串,但不是一个函数。对于me@DamianGreenRamda implement
R.replace
为本机javascript字符串方法。第二个参数也可以是函数,请参阅
const capitalize = R.compose(R.toUpper, R.head);
const lowercaseTail = R.compose(R.toLower, R.tail);
const toTitle = R.converge(R.concat, [capitalize, lowercaseTail]);

toTitle('rAmdA');
// -> 'Ramda'