Функция заглавного стиля без точек с помощью Ramda

При написании функции заглавной буквы тривиально, так что:

"hello" => "Привет" "привет там" => "Привет там"

Как написать его, используя стиль без точек, используя Ramda JS?

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

javascript,pointfree,ramda.js,

4

Ответов: 5


9 принят

Это было бы так:

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

Демо (в ramdajs.com REPL).

И незначительная модификация для обработки значений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);

replace

Вы можете частично применить toUpperс Regex, который работает toUpperна первом символе:

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


3

Я предлагаю использовать R.lens:

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

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

1

Я собрал несколько быстрых и грязных тестов для всех, кого это интересует. Похоже, что @ lax4mike является самым быстрым из предоставленных ответов (хотя более простой, без точечной скорости str[0].toUpperCase() + str.slice(1)быстрее (а также не тот, о котором спрашивал OP, так что это спор)].

https://jsfiddle.net/960q1e31/ (вам нужно открыть консоль и запустить скрипт, чтобы увидеть результаты)


0

Для тех, кто достигает этого, ищет решение, которое заглаживает первую букву, а также уменьшает остальные буквы , вот она:

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'
JavaScript, pointfree, ramda.js,
Похожие вопросы