![](/img/trans.png)
[英]Error using Javascript filter() function in freecodecamp
[英]Error in Javascript Code in Freecodecamp
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'。
=为什么你越来越原因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);
来追加其余部分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"));
您应该在循环条件中使用strArr
的长度:
for(var i=0; i <strArr.length;i++)
或者只是使用for
- of
。
当你使用str
的长度时,它可能会比strArr
的长度更长,所以它会超出数组索引并导致错误。
2示例如下所示:
1)UseMapFunction - 这可能是最好的方法,因为我们只是将val.charAt(0)
替换为val.charAt(0).toUpperCase()
2)更详细的方法是使用substring
和良好的ole loop
。 效果也很好。
function UseMapFunction(str) { var strArr = str.toLowerCase().split(' '); var newStrArr = strArr.map(function(val){ return val.replace(val.charAt(0),val.charAt(0).toUpperCase()); }); console.log(newStrArr.join(' ')); } UseMapFunction("one way to do it is with map"); function UseSubstring(str) { var strArr = str.split(' '); var newArr =[]; for (var i = 0; i<strArr.length; i++){ newArr.push(strArr[i].substring(0,1).toUpperCase() + strArr[i].substring(1,strArr[i].length).toLowerCase()); } console.log(newArr.join(' ')); } UseSubstring("alternatively use substring and it works fine too");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.