arr
- это массив строк, но строки являются неизменяемыми - простой вызов toUpperCase()
для символа просто даст вам ссылку на новый, заглавный символ, без изменения исходной строки.Вам необходимо явно переназначить элемент массива:
function titleCase(str) {
let arr = str.toLowerCase().split(" ");
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
}
return arr.join(" ");
}
console.log(titleCase("I'm a little tea pot"));
Или, возможно, более элегантно, вы можете использовать регулярное выражение.Далее используется lookbehind, который работает в последних версиях Chrome, Opera и Node;lookbehind делает код более чистым, но он не поддерживается везде:
const titleCase = str => str.replace(
/(?<=^|\s)\S/g,
firstChar => firstChar.toUpperCase()
);
console.log(titleCase("I'm a little tea pot"));
Или без взгляда:
const titleCase = str => str.replace(
/(\S)(\S*)/g,
(_, firstChar, rest) => firstChar.toUpperCase() + rest
);
console.log(titleCase("I'm a little tea pot"));