本文基于Free Code Camp基本算法脚本“标题案例一句”。
在此算法中,我们要更改文本字符串,以便每个单词的开头始终都有一个大写字母。
在本文中,我将解释三种方法。首先使用FOR循环,其次使用map()方法,第三次使用replace()方法。
算法挑战
- 返回提供的字符串,每个单词的首字母大写。确保单词的其余部分为小写。
- 出于此练习的目的,你还应该大写连接词,例如“ the”和“ of”。
提供的测试用例
- titleCase(“I’m a little tea pot”)返回一个字符串。
- titleCase(“I’m a little tea pot”)返回“I’m A Little Tea Pot”。
- titleCase(“sHoRt AnD sToUt”)返回“ Short And Stout”。
- titleCase(“HERE IS MY HANDLE HERE IS MY SPOUT”)返回“Here Is My Handle Here Is My Spout”。
1.标题大小写带有FOR循环的句子
对于此解决方案,我们将使用String.prototype.toLowerCase()方法
String.prototype.split()方法,String.prototype.charAt()方法
String.prototype.slice()方法和Array.prototype.join()方法
- toLowerCase()的方法返回主字符串值转换为小写
- split()的方法通过分离串为子分割字符串对象到字符串数组。
- charAt()的方法返回从字符串指定的字符。
- slice()的方法提取的字符串的一部分,并返回一个新的字符串。
- join()的方法连接到一个字符串数组的所有元素。
我们将需要在split()方法的括号之间添加一个空格
var strSplit = "I'm a little tea pot".split(' ');
它将输出一个由单词组成的数组:
var strSplit = ["I'm", "a", "little", "tea", "pot"];
如果不在括号中添加空格,则将得到以下输出:
var strSplit = ["I", "'", "m", " ", "a", " ", "l", "i", "t", "t", "l", "e", " ", "t", "e", "a", " ", "p", "o", "t"];
我们将其合并
str[i].charAt(0).toUpperCase()
在FOR循环中将大写前的字符串索引0字符
和
str[i].slice(1)
将从索引1提取到字符串的末尾。
为了标准化,我们将整个字符串设置为小写。
有注释:
function titleCase(str) {
// Step 1. Lowercase the string
str = str.toLowerCase();
// str = "I'm a little tea pot".toLowerCase();
// str = "i'm a little tea pot";
// Step 2. Split the string into an array of strings
str = str.split(' ');
// str = "i'm a little tea pot".split(' ');
// str = ["i'm", "a", "little", "tea", "pot"];
// Step 3. Create the FOR loop
for (var i = 0; i < str.length; i++) {
str[i] = str[i].charAt(0).toUpperCase() + str[i].slice(1);
/* Here str.length = 5
1st iteration: str[0] = str[0].charAt(0).toUpperCase() + str[0].slice(1);
str[0] = "i'm".charAt(0).toUpperCase() + "i'm".slice(1);
str[0] = "I"