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

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

например

This string ShouLD be ALL in title CASe

должен стать

This String Should Be All In Title Case
 Chaudhary09 окт. 2018 г., 12:41
вы можете сделать то же самое из HTML,style = "text-transform: capitalize"
 Alexandre Thebaldi28 июн. 2016 г., 21:16

Ответы на вопрос(11)

ть_.upperFirst в то время как некоторые рекомендуют_.startCase.

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

я)_.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

 brandonscript27 июн. 2018 г., 08:13
Да, но как насчет строк в смешанном регистре? Ни один из них не превратит «JOn DoE» в «Jon Doe» без_.lower().

«Дьявольский хребет»

Просто:

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

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

'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');
 gonzarodriguezt16 авг. 2019 г., 22:05
Это было лучше для моего варианта использования, какstartCase конвертирует все в бланк напримерuser_name будетUser Nameи я только хотелUser_name словноtext-transform: capitalize свойство CSS
 LuckyStarr12 июл. 2017 г., 16:55
_.startCase удаляет пунктуацию пример_.startCase('first second etc... возвращает строкуFirst Second Etc
 brandonscript28 июн. 2016 г., 21:25
... но _.startCase определенно выигрывает :)
 brandonscript28 июн. 2016 г., 21:19
Определенно самый лаконичный, нравится. Очевидно, что все еще требуется разбиение на массив, но это все же самое короткое и приятное решение из того, что я могу сказать. Также, согласно проблеме 1528, на которую указал @AlexandreThebaldi, вероятно, следует использоватьupperFirst вместоcapitalize.
_.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'
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

у lodash нет своих собственных методов в нижнем / верхнем регистре.

 brandonscript28 июн. 2016 г., 21:13
Интересно, могли бы мы упростить это, используя._words()?
 vbotio28 июн. 2016 г., 21:14
_.upperFirst ([ваша строка здесь]); работает ?
 vbotio28 июн. 2016 г., 21:19
_.capitalize применяется ко всей строке
 Brandon28 июн. 2016 г., 21:19
capitalize а такжеupperFirst делать разные вещи.
 brandonscript28 июн. 2016 г., 21:17
@vbotio выглядит_.upperFirst относится только к первому символу (синоним_.capitalize()?)
Решение Вопроса

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

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

console.log(_.startCase(_.toLower("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>

 aristidesfl15 сент. 2016 г., 13:08
.startCase ("camelString") === "Строка верблюда", но _.startCase (.toLower ("camelString")) === "Camelstring" похоже, что для lodash нужен метод titleCase
 4castle15 сент. 2016 г., 17:08
@aristidesfl Но это сломало бы строку'This string ShouLD be ALL in title CASe' поэтому я этого не делал. посколькуShouLD станетShou L D
 Flo10 мая 2019 г., 22:29
Это не работает для имен с акцентом (испанский "Martínez Cortés Peña" становится "Martinez Cortes Pena") или с дефисами (французский "Jean-Louis" становится "Jean Louis"). То же самое касается любых функций "* Case" в lodash
 4castle15 сент. 2016 г., 16:56
@aristidesfl Чтобы справиться с ситуацией, когда входные данные были CamelCase, вам нужно будет выполнить его через_.lowerCase сначала вместо_.toLower, Но да, очень жаль, что нет функции, которая просто идет прямо к ней.
 4castle28 июн. 2016 г., 21:23
@ Брэндон Как насчет сейчас?
 Brandon28 июн. 2016 г., 21:21
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
 Brandon28 июн. 2016 г., 21:23
Мне это нравится. Я не знал оstartCase.
 4castle18 сент. 2016 г., 19:35
@aristidesfl Правильно, но этот вопрос касается CrAzY CaSE, поэтому этот ответ не отвечает на вопрос.
 aristidesfl18 сент. 2016 г., 19:32
@ 4каст правда. однако я подозреваю, что в большинстве ситуаций, когда вы хотите отобразить регистр заголовка, вы не начинаете со случайного CrAzY CaSE. Чаще всего хочется преобразовать из другого типа дела, и предложенный метод справляется с этим лучше (верхний, верблюд, паскаль, змея)stackoverflow.com/a/39510222/1445812
 JabberwockyDecompiler25 мая 2018 г., 17:04
Мне нравится это, однако, он удаляет такие символы, как:Это проблема.
 aristidesfl22 сент. 2016 г., 19:33
@ 4castle, хотя вопрос не относится к CraZy CaSE, приведенный пример - CrAzY CaSE, поэтому достаточно справедливый. Не устаю печатать в CrAzY CaSE.

var str = "TITLECASE"; _.startCase (str.toLowerCase ());

 brandonscript01 дек. 2018 г., 17:13
Хм выглядит примерно так же, как и все остальные ответы ...

одов:

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

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

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

Увидетьhttps://lodash.com/docs/4.17.5#capitalize для деталей

 brandonscript23 мар. 2018 г., 06:08
Было бы неплохо проверить вариант использования для предложения слов. Подозреваю, что это не делает заглавными все первые буквы каждого слова.
 Andres Zapata24 апр. 2018 г., 23:48
Действительно, «предложение» выводит «предложение»

_.upperFirst(_.toLower(str))

 Raghavan01 нояб. 2018 г., 01:26
upperFirst изменит только первый символ первого слова, но не для последующих слов. Я не верю, что это лучше, чем startCase по этой конкретной причине.
 Lars Nyström05 мар. 2018 г., 11:21
Этот лучше чемstartCase потому что он может обрабатывать больше букв, чем a-z, например, å, ä и ö.

как ответ @ 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>

 m-a-r-c-e-l-i-n-o28 июн. 2016 г., 23:09
Что с понижением?
 brandonscript29 июн. 2016 г., 04:04
Я предполагаю, что многословие и длина ответа делают его почти нежелательным. Я не понизил голос, но это был бы не мой первый выбор.

Ваш ответ на вопрос