Freecodecamp中的Javascript代码出错

时间:2018-04-01 07:36:07

标签: javascript

function titleCase(str) {
     var strArr = str.toLowerCase().split(' ');
     var strUp = [str.length];  
     for(var i=0;i<str.length;i++)
     {
        strUp[i] = strArr[i].charAt(0).toUpperCase();
     }

     return strUp.join(' ');  
}

titleCase("I'm a little tea pot");

我遇到了freecodecamp中的一个问题。

显示:

  

无法读取未定义的属性'charAt'。

3 个答案:

答案 0 :(得分:1)

=您获得Cant read property 'charAt' of undefined".的原因是您在str.length循环中使用for。您应该使用strArr.lengthstr的长度始终大于strArr的长度,这就是您获得最后一部分迭代的undefined的原因。

=您还应添加strArr[i].slice(1);以添加单词上的其余字母。 strArr[i].charAt(0).toUpperCase()只返回第一个字母(Capital)。您应该通过添加strArr[i].slice(1);

来附加其余内容

function titleCase(str) {
  var strArr = str.toLowerCase().split(' ');
  var strUp = [];

  for (var i = 0; i < strArr.length; i++) {
    strUp[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);
  }
  return strUp.join(' ');
}

console.log(titleCase("I'm a little tea pot"));

答案 1 :(得分:0)

您应该在循环条件中使用strArr的长度:

for(var i=0; i <strArr.length;i++)

或者只使用for - of

当你使用str的长度时,它可能会比strArr的长度更长,所以它会超出数组索引,这会导致错误。

答案 2 :(得分:0)

2示例如下所示:

1)UseMapFunction - 这可能是最好的方法,因为我们只替换val.charAt(0)的{​​{1}}

2)更详细的方法是使用val.charAt(0).toUpperCase()和一个好的substring。效果也很好。

&#13;
&#13;
loop
&#13;
&#13;
&#13;