Как я могу прописать первую букву каждого слова в строке? - PullRequest
3 голосов
/ 14 апреля 2019

Следующая функция должна заглавными буквами первой буквы каждого слова в предложении (str)!К сожалению, это не работает, и я не могу найти решение!

function titleCase(str) {
  let arr = str.toLowerCase().split(" ");
  for (let i = 0; i < arr.length; i++) {
    arr[i].charAt(0).toUpperCase();
  }
  return arr.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

Ответы [ 3 ]

3 голосов
/ 14 апреля 2019

Вам нужно присвоить результат в верхнем регистре буквы и объединить его с остальной частью слова:

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].substring(1);
  }
  return arr.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

Также проще в использовании map:

function titleCase(str) {
  return str.split(" ").map(s => s.charAt(0).toUpperCase() + s.substring(1)).join(" ");
}

console.log(titleCase("I'm a little tea pot"));
1 голос
/ 14 апреля 2019

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"));
0 голосов
/ 14 апреля 2019

Вы можете обновить свой код таким образом

  • Первые строчные буквы всех символов
  • Перебирать строковые индексы
  • Если индекс 0 или index - 1 - это пробел, введите str[index] в верхний регистр
  • Продолжайте добавлять строку и возвращать в конце

function titleCase(str) {
 let LowerCaseStr = str.toLowerCase()
 let final =''
 for (let i = 0; i < LowerCaseStr.length; i++) {
   if(i === 0 || LowerCaseStr[i-1] === ' '){
     final += LowerCaseStr[i].toUpperCase()
   } else{
     final += LowerCaseStr[i]
   }
 }
return final
}

console.log(titleCase("I'm a little tea pot"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...