Первая буква каждого слова заглавная
Добрый день! Совсем недавно начал изучать 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, время: 03:12. |