Вход

Просмотр полной версии : Первая буква каждого слова заглавная


aMacio
04.05.2022, 21:51
Добрый день! Совсем недавно начал изучать 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. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.

ksa
04.05.2022, 23:13
Но. Мне предложили данную задачу решить решить через indexOf и substring. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.
Как вариант, с помощью indexOf() искать пробел, с некой "текущей позиции"... Потом брать следующий символ, переводить его в верхний регистр и записывать вместо считанного.
Потом смещать "текущую позицию" и повторять действия пока еще есть пробелы.
Как пробелы закончатся - показывать что получилось.

рони
04.05.2022, 23:52
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>

micscr
05.05.2022, 08:29
Я б так сделал:


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(' ');
}

рони
05.05.2022, 09:49
Я б так сделал:
решить через indexOf и substring.
:-?

micscr
07.05.2022, 18:15
зачем делать как кто то предложил?, это что тест?, особенно если предложили слегка не лучшее

rragegfffa
30.05.2022, 18:09
Разнообразия ради


// Только латиница
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())

TAPAKAH
23.10.2023, 17:37
Разнообразия ради


// Только латиница
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())


Выдает ошибку: Unsupported RegExp flag: u

voraa
23.10.2023, 17:57
Выдает ошибку: Unsupported RegExp flag: u

Какой браузер, какая версия?

ruslan_mart
23.10.2023, 18:05
Короткое решение через регулярку:

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('доброго дня уважаемый'));

Aetae
23.10.2023, 19:50
text-transform: capitalize;
И всё, не надо мучать скрипт.:)

ruslan_mart
23.10.2023, 20:21
Aetae, полагаю, что у автора такая задачка на курсах или в универе :)