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'。
答案 0 :(得分:1)
=您获得Cant read property 'charAt' of undefined".
的原因是您在str.length
循环中使用for
。您应该使用strArr.length
。 str
的长度始终大于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
。效果也很好。
loop
&#13;