Заглавный регистр Lodash (первая буква каждого слова заглавная)


109

Я просматриваю документы lodash и другие вопросы о переполнении стека - хотя есть несколько собственных способов выполнения этой задачи JavaScript , есть ли способ преобразовать строку в регистр заголовка, используя чисто функции lodash (или, по крайней мере, существующие прототипные функции) чтобы мне не пришлось использовать регулярное выражение или определять новую функцию?

например

This string ShouLD be ALL in title CASe

должен стать

This String Should Be All In Title Case


3
вы можете сделать то же самое и из HTML, style = "text-transform: capitalize"
Чаудхари

Ответы:


216

Это можно сделать с помощью небольшой модификации startCase:

_.startCase(_.toLower(str));


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
Brandon

2
Мне это нравится. Я не знал об этом startCase.
Брэндон

1
.startCase ( "camelString") === "Camel String" , но _.startCase ( .toLower ( "camelString")) === "Camelstring" Похоже , lodash нужен метод titleCase
aristidesfl

4
Мне это нравится, однако он удаляет такие символы, как :, это проблема.
JabberwockyDecompiler

1
Он не работает для имен с акцентом (испанское «Martínez Cortés Peña» становится «Martinez Cortes Pena») или с дефисами (французское «Жан-Луи» становится «Жан Луи»). То же самое касается любых "* Case" функций lodash
Flo

43
_.startCase(_.camelCase(str))

Для текста, не созданного пользователем, это обрабатывает больше случаев, чем принятый ответ.

> startCase(camelCase('myString'))
'My String'
> startCase(camelCase('my_string'))
'My String'
> startCase(camelCase('MY_STRING'))
'My String'
> startCase(camelCase('my string'))
'My String'
> startCase(camelCase('My string'))
'My String'

27

с lodash версии 4.

_.upperFirst(_.toLower(str))


3
Этот лучше, чем startCaseпотому, что он может обрабатывать больше букв, чем az, например å, ä и ö.
Lars Nyström

3
upperFirst изменит только первый символ первого слова, а не для последующих слов. Я не считаю, что это лучше, чем startCase именно по этой причине.
Raghavan

15
'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');

1
Однозначно самый лаконичный, нравится. Очевидно, все еще требуется разбиение на массив, но это все еще самое короткое и приятное решение из того, что я могу сказать. Кроме того, согласно проблеме 1528, которую указал @AlexandreThebaldi, вероятно, следует использовать upperFirstвместо capitalize.
brandonscript

... но _.startCase определенно выигрывает :)
brandonscript

5
_.startCaseубирает пунктуацию. Пример _.startCase('first second etc...возвращает строкуFirst Second Etc
LuckyStarr

Это было лучше для моего случая использования в качестве startCaseПреобразует все к заготовке, например , user_nameбудет User Name, и я хотел только User_nameкак text-transform: capitalizeсвойство CSS
gonzarodriguezt

7

На этот вопрос есть неоднозначные ответы. Некоторые рекомендуют использовать, _.upperFirstа некоторые рекомендуют _.startCase.

Знайте разницу между ними.

i) _.upperFirstпреобразует первую букву вашей строки, тогда строка может состоять из одного слова или нескольких слов, но единственная первая буква вашей строки преобразуется в верхний регистр.

_.upperFirst('jon doe')

вывод:

Jon doe

проверьте документацию https://lodash.com/docs/4.17.10#upperFirst

ii) _.startCaseпреобразует первую букву каждого слова внутри вашей строки.

_.startCase('jon doe')

вывод:

Jon Doe

https://lodash.com/docs/4.17.10#startCase


Ага, а как насчет строк со смешанным регистром? Ни один из них не превратит «jOn DoE» в «Jon Doe» без него _.lower().
brandonscript

3

Вот способ использования ТОЛЬКО методов lodash и без встроенных методов:

_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)

1
const titleCase = str =>
  str
    .split(' ')
    .map(str => {
      const word = str.toLowerCase()
      return word.charAt(0).toUpperCase() + word.slice(1)
    })
    .join(' ')

Вы также можете разделить функцию карты на отдельные слова


0
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

Если я не пропустил, lodash не имеет собственных методов нижнего / верхнего регистра.


@vbotio похоже _.upperFirstотносится только к первому символу (синоним _.capitalize()?)
brandonscript

1
capitalizeи upperFirstделать разные вещи.
Brandon

_.capitalize применяется ко всей строке
vbotio

0

Не такой краткий, как ответ @ 4castle, но, тем не менее, описательный и полный lodash ...

var basicTitleCase = _
    .chain('This string ShouLD be ALL in title CASe')
    .toLower()
    .words()
    .map(_.capitalize)
    .join(' ')
    .value()

console.log('Result:', basicTitleCase)
console.log('Exact Match:' , basicTitleCase === 'This String Should Be All In Title Case')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>


Я предполагаю, что многословность и длина ответа делают его почти нежелательным. Я не голосовал против, но это был бы не мой первый выбор.
brandonscript

0

Вот еще одно решение для моего варианта использования: "позвоночник дьявола"

Просто:

function titleCase (str) {
  return _.map(str.split(' '), _.upperFirst).join(' ');
}

Использование startCase удалит апостроф, поэтому мне пришлось обойти это ограничение. Остальные решения казались довольно запутанными. Мне он нравится, потому что он чистый, понятный.


0

Это можно сделать только с помощью lodash

properCase = string =>
        words(string)
            .map(capitalize)
            .join(' ');

const proper = properCase('make this sentence propercase');

console.log(proper);
//would return 'Make This Sentence Propercase'

Вам нужно требовать заглавные буквы и слова из lodash.
Джастин Браун


Да, но вы не вызываете функции из lodash; если вы как-то не var words = ._words
назвали


-3

с lodash 4 вы можете использовать _.capitalize ()

_.capitalize('JOHN') Возвращает "Джон"

См https://lodash.com/docs/4.17.5#capitalize подробности


Было бы хорошо протестировать вариант использования для предложения слов. Подозреваю, что это не все первые буквы каждого слова с большой буквы.
brandonscript

Действительно, «предложение» выводит «предложение»
Андрес Сапата
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.