我正在尝试将句子中每个单词的首字母大写。但是,我从下面的代码中得到的输出是:“我是个小茶壶”。我尝试找到有关map函数的回调函数的index参数如何工作的详细说明,但没有找到。我想指示它在大小写字母为空格之前将其大写。我的代码有什么问题?
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"));
最佳答案
这太疯狂了。
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
关于javascript - 我在.map()中错误地使用了回调函数的索引参数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41183285/