我在.map()中错误地使用了回调函数的索引参数吗?

时间:2016-12-16 11:20:30

标签: javascript

我正试图将句子中每个单词的第一个字母大写。但是,我从下面的代码得到的输出是:“我是一个小茶壶”。我试图找到有关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"));

1 个答案:

答案 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