我目前正在接受Free Code Camp的第一次JS挑战。
我遇到了标题为Case Case a Sentence的挑战。在这个挑战中,我需要编写一个函数,将给定字符串中单词的每个首字母大写,并将所有其他字母小写。 Here's指向挑战的链接 我编写了以下代码,尝试完成以下操作:
SPLIT | str |到一个字母的阵列
DEFINE LOCAL VARIABLE | toCAP |在空间之后出现的每一封信|“”|
如果有空格后的信件
CAPITALIZE | LETTER |
PUSH | LETTER |不是
ELSE
| LETTER |被定义为信件
| LETTER |被降低了
| LETTER |被推送到信件索引
在没有间隔的情况下返回阵列
function titleCase(str) {
str.toLocaleLowerCase();
var letterArray = str.split("");
var letter = "";
for (var i = 0; i < letterArray.length; i++) {
if (i == 0) {
letter = letterArray[0];
letter.toUpperCase();
letterArray[0] = letter;
} else if (letterArray[i - 1] == " ") {
letter = letterArray[i];
letter.toUpperCase();
letterArray[i] = letter;
}
}
return letterArray.join("");
}
titleCase("I'm a little tea pot");
为什么第二个条件不起作用,将每个单词的第一个字母大写?
答案 0 :(得分:0)
这是使用forEach循环而不是传统for循环的替代方法 - 首先将传递的字符串拆分为单词,然后将每个单词拆分为字母。将第一个字母和psuh所有字母大写为返回的数组。
function titleCase(str) {
var wordArray = str.toLowerCase().split(" ");
var sentenceArray = [];
wordArray.forEach(function(word) {
var letters = word.split('');
letters[0] = letters[0].toUpperCase();
sentenceArray.push(letters.join(''))
})
return sentenceArray.join(" ");
}
console.log(titleCase("I'm a little tea pot"));
console.log(titleCase("sHoRt AnD sToUt"));
console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT"));
&#13;
答案 1 :(得分:0)
您希望首先将字符串设置为小写,以便考虑所有输入情况。我在代码中包含了一些注释。我拿出的解决方案中有过多的字符串重新分配。你的第二个条件是没有正确选择字母,你想要arr [i]而不是arr [i - 1]
function titleCase(str) {
var newStr = str.toLowerCase(); //hold a lowercase version of str
var letterArray = newStr.split("");
var letter = "";
for (var i = 0; i < letterArray.length; i++) {
if (i == 0) { //test for first letter
letterArray[0] = letterArray[0].toUpperCase(); //reassign as the uppercase version
} else if (letterArray[i] == " ") {
letterArray[i + 1] = letterArray[i + 1].toUpperCase(); //if space is detected, set the next letter to uppercase
}
}
return letterArray.join(""); //join into a string
}
以下是我提出的解决方案:
function titleCase(str) {
var newStr = str.toLowerCase();
var result;
var arr = newStr.split("");
arr[0] = arr[0].toUpperCase();
for (var i = 0; i < arr.length; i++){
if (arr[i] === " "){
arr[i + 1] = arr[i + 1].toUpperCase();
}
}
result = arr.join("");
return result;
}
答案 2 :(得分:0)
function titleCase(str) {
return str.toLowerCase().split(' ').map((word) => (word.charAt(0).toUpperCase() + word.slice(1))).join(' ');
}