我正在解决freecodecamp.com上的一个问题,我想知道到目前为止我的代码是否正在做我认为它正在做的事情......
function titleCase(str) {
var wordArr = str.split(' '); // now the sentences is an array of words
for (var i = 0; i < wordArr.length; i++) { //looping through the words now...
charArr = wordArr[i].split(''); //charArr is a 2D array of characters within words?
return charArr[1][1];
}
}
titleCase("a little tea pot"); // this should give me 'i', right?
同样,这只是代码的开头。我的目标是将titleCase();
参数中每个单词的首字母大写。也许我根本就没有这么做。
但......在第4行{是charArr
是一个多维数组。这是否创建了[['a'],['l','i','t','t','l','e'],['t','e','a','p','o','t']]
?
答案 0 :(得分:1)
几个问题:
1.您的退货声明将在一次迭代后停止
2.如果其中一个单词少于2个字母(如示例中的第一个单词,即'a') - 您将在charArr [1] [1]处获得异常。
除此之外,它基本上没问题。 它可能会帮助您下载像firebug这样的工具并实时测试您的代码......
答案 1 :(得分:1)
除了ABR答案(我还不能发表评论):
charArr是一维数组,如果你想要它是一个二维数组,你需要推送wordArr [i] .split('');而不是分配它。
charArr.push(wordArr[i].split(''));
不要忘记将charArr初始化为空数组
答案 2 :(得分:0)
您可以执行以下操作:
function titleCase(str) {
var newString = "";
var wordArr = str.split(' ');
for (var i = 0; i < wordArr.length; i++) { //looping through the words now...
var firstLetter = wordArr[i].slice(0,1); // get the first letter
//capitalize the first letter and attach the rest of the word
newString += firstLetter.toUpperCase() + wordArr[i].substring(1) + " ";
}
return newString;
}
此外,您需要删除return statement
中的for loop
,因为for循环第一次超过return
语句时,它将结束该功能,您将无法循环遍历所有单词
您可以在此处详细了解string.slice()
:http://www.w3schools.com/jsref/jsref_slice_string.asp