我创建了一个函数,给定任何字符串将返回每个单词的第一个和最后一个字母大写的字符串。到目前为止,它在某些方面有效,在其他方面无效,有人可以帮我弄清楚为什么吗?
function Capitalize(str) {
var spl = str.split(" ");
var words = [];
for (let i = 0; i < spl.length; i++) {
//For every word
for (let j = 0; j < spl[i].length; j++) {
//For every letter in each word
var word = spl[i];
var size = spl[i].length;
var firstLetterCapital = word.replace(word[0], word[0].toUpperCase()); //Creates new array
var LastLetterCapital = firstLetterCapital.replace(
word[size - 1],
word[size - 1].toUpperCase()
);
}
words.push(LastLetterCapital);
}
console.log(words.join(" "));
}
Capitalize("hello there");
Run Code Online (Sandbox Code Playgroud)
当我输入 : 时它有效Capitalize("my name is john smith"),但不与Capitalize("hello there")
我知道这是一团糟,可能是一种非常糟糕的方法,但我一个月前开始编程,所以让我休息一下:)
@symlink 已经解释了为什么它是“HellO ThEre”而不是“Hello TherE”。他还给出了一个解决方案来明确定位字符串的第一个和最后一个字符。我所完成的工作与成员已经发布的工作没有太大不同,除了..“可能是”更多的解释。
您可以通过这四个步骤来解决整个问题。
我编写了两个函数来完成这项任务。很抱歉函数名称很长。它帮助我跟踪复杂程序中的事情(特别是当我很匆忙时!)。
步骤2功能
function Capitalize_FirstAndLast_One_Word(word){
// Split the string in array for easy access/manipulation by indexing
Split_String = word.split("")
// Target the first word
Split_String[0] = Split_String[0].toUpperCase();
// Target the last word
Split_String[Split_String.length - 1] = Split_String[Split_String.length - 1].toUpperCase();
// Join the array into a single word
Joined_Back = Split_String.join("")
return Joined_Back;
}
Run Code Online (Sandbox Code Playgroud)
步骤 1、3 和 4 功能
function Capitalize_Entire_String(str){
Regular_Exp = new RegExp(/\w+/g);
//Below is step 1
MatchedArray = str.match(Regular_Exp);
//Below is step 3
ConvertedArray = MatchedArray.map(Capitalize_FirstAndLast_One_Word);
// Below is step 4
ReturnedString = ConvertedArray.join(" ");
console.log(ReturnedString);
return ReturnedString;
}
Run Code Online (Sandbox Code Playgroud)
现在你拥有了一切。您可以使用如下所示的功能。
Capitalize_Entire_String("hello there");
Capitalize_Entire_String("hello there this is a test");
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。如果这对您来说是多余的答案,我很抱歉。