Can't capitalize the first letter of the word
我正在尝试将字符串中每个单词的第一个字母大写。我想分三步完成:
但是出了点问题,我不能走第三步。for循环确实将字母改为大写,但是当我返回变量cap时,它只返回字符串中最后一个单词的第一个大写字母。在这个例子中,它是p(最后一个词是pot),如果我擦掉pot,它会返回t(因为tea变成了最后一个词)。
为什么cap变量不返回首字母大写的整个数组?我错过了什么?
代码如下:
1 2 3 4 5 6 7 8 9 | function titleCase(str) { var arr = str.split(""); for (i = 0; i < arr.length; i++) { var cap = arr[i][0].toUpperCase(); } return cap; } titleCase("I'm a little tea pot"); |
这是因为您只是返回cap变量,该变量将包含最后一个单词,第一个字母变为大写(由最后一次迭代留下)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function titleCase(str) { var arr = str.split(""); for (i = 0; i < arr.length; i++) { var word = arr[i]; // capitalized first letter + rest of the word var capitalizedWord = word[0].toUpperCase() + word.slice(1); arr[i] = capitalizedWord; // replace the uncapitalized word with capitalized one } return arr.join(""); // join with spaces to make it a sentence again } titleCase("I'm a little tea pot"); |
这是因为
ES2015解决方案:
1 2 3 4 5 6 | const titleCase = str => str.split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1) ).join(' '); titleCase("I'm a little tea pot")); |
。
工作示例:https://jsfiddle.net/ecdkxrjd/
你犯了javascript的大罪!不要在循环内声明变量。
1 2 3 4 5 6 7 8 | function titleCase(str) { var cap; var arr = str.split(""); for (i = 0; i < arr.length; i++) { cap = arr[i][0].toUpperCase(); } return cap; } |
。
这是正确的打字方法。
当for循环在示例中迭代时,它每次都会重新声明变量,这会导致一些不好的事情发生。在我的示例中,它每次都被重新定义,但只声明一次。
但是,这对于您的问题仍然是不正确的。这只会在需要整个字符串时给您一个字母。试试这个
1 2 3 4 5 6 7 8 9 10 11 12 | function titleCase(str) { var arr = str.split(""); var wordToCap; var capWord; var capArray = []; for (var i = 0; i < arr.length; i++) { wordToCap = arr[i]; capWord = wordToCap.charAt(0).toUpperCase() + wordToCap.substring(1); capArray.push(capWord); } return capArray.join(""); } |
有很多更优雅的方法来解决这个问题,但希望这里列出的所有步骤都能帮助您理解循环正在做什么,应该做什么。
祝你好运!
在每次迭代中,您都要覆盖变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function titleCase(str) { var arr = str.split(""); var cap =""; for (i = 0; i < arr.length; i++) { if (i != arr.length - 1) { cap += arr[i][0].toUpperCase() + arr[i].substr(1) +""; } else { cap += arr[i][0].toUpperCase() + arr[i].substr(1); } } return cap; } titleCase("I'm a little tea pot"); |
我想答案是:
1 2 3 | const capitalizeFirst = data => data.replace(/[\w']+/g, x => x[0].toUpperCase() + x.slice(1).toLowerCase()) console.log(capitalizeFirst("I'm a little tea pot")) |
号