我正试图将句子中每个单词的第一个字母大写。但是,我从下面的代码得到的输出是:“我是一个小茶壶”。我试图找到有关map函数的回调函数的索引参数如何工作但没有找到的详细解释。如果前面的元素是空格,我想指示它将字母大写。我的代码出了什么问题?
function titleCase(str) {
str= str.toLowerCase().split("");
var newArr= str.map( function(i,j){
if ( j===0 ){
return i.toUpperCase();}
else if (str[j--]===" "){
return i.toUpperCase();
}
return i;
});
return newArr.join("");
}
console.log(titleCase("i'm a little tea pot"));
答案 0 :(得分:-1)
这里很疯狂。
else if (str[j--]===" ") {
您正在修改j
值。你不应该这样做。你应该这样做:
else if (str[j-1]===" ") {
此外,它是一个后减量运算符。这是非常危险的,因为它会导致无限循环。另外,这总是给出当前值,它在空格上应用大写。
进行小修改:
function titleCase(str) {
str = str.toLowerCase().split("");
var newArr = str.map(function(i, j) {
if (j === 0) {
return i.toUpperCase();
} else if (str[j-1] === " ") {
return i.toUpperCase();
}
return i;
});
return newArr.join("");
}
console.log(titleCase("i'm a little tea pot"));

<强>输出:强>
I'm A Little Tea Pot