Первая буква каждого слова заглавная
Добрый день! Совсем недавно начал изучать JS.
У меня есть такая задача: Необходимо, чтобы каждое слово во фразе начиналось с заглавной буквы. Данную задачу решил таким способом: const str1 = "доброго"; const str2 = "дня"; const str3 = "уважаемый" console.log(`${str1.charAt(0).toUpperCase() + str1.substring(1)} ${str2.charAt(0).toUpperCase() + str2.substring(1)}, ${str3.charAt(0).toUpperCase() + str3.substring(1)}!`) В целом - все получилось. Но. Мне предложили данную задачу решить решить через indexOf и substring. Но не знаю как ... На входе строка идет целиком, а не по отдельности, как сделал я выше. |
Цитата:
Потом смещать "текущую позицию" и повторять действия пока еще есть пробелы. Как пробелы закончатся - показывать что получилось. |
aMacio,
при условии одиночного пробела между словами... <body> <script> const str1 = "доброго"; const str2 = "дня"; const str3 = "уважаемый"; let txt = [str1, str2, str3].join(" "); let i = -1; do { txt = txt.substring(0, ++i) + txt.substring(i, ++i).toUpperCase() + txt.substring(i); i = txt.indexOf(" ", i); } while ( i != -1 ); document.body.append(txt); </script> </body> |
Я б так сделал:
let phrase = 'слово1 еще что-то я' console.log(phrase); let res = transform(phrase); console.log(res); function transform(str) { let arr = str.split(' ').map((item) => item ? item.charAt(0).toUpperCase() + item.substring(1) : item); return arr.join(' '); } |
Цитата:
Цитата:
|
зачем делать как кто то предложил?, это что тест?, особенно если предложили слегка не лучшее
|
Разнообразия ради
// Только латиница const capitalizeWords = str => str.replace(/\b[a-z]/g, m => m.toUpperCase()) // Любые символы из категории "буквы" (в т.ч. вся кириллица), строки типа "кто-то" => "Кто-То" const capitalizeWords = str => str.replace(/(?<=\P{L}|^)\p{Ll}/gu, m => m.toUpperCase()) |
Цитата:
|
Цитата:
|
Короткое решение через регулярку:
function toCapizalize(value) { return value.replace(/(^|\s)(.)/g, (_, a, b) => a + b.toUpperCase()); } console.log(toCapizalize('доброго дня уважаемый')); Простое и быстрое решение через цикл: function toCapizalize(value) { let finalValue = ''; let prevChar = ' '; for (let i = 0; i !== value.length; i++) { const char = value[i]; if (prevChar === ' ') { finalValue += char.toUpperCase(); } else { finalValue += char; } prevChar = char; } return finalValue; } console.log(toCapizalize('доброго дня уважаемый')); Еще можно так поизвращаться: function toCapizalize(value) { const fragments = value.split(/(?:^|\s)(.)/) .map((item, index) => index % 2 !== 0 ? ' ' + item.toUpperCase() : item); return fragments.join('').trim(); } console.log(toCapizalize('доброго дня уважаемый')); |
Часовой пояс GMT +3, время: 06:03. |