Title Case a Sentence
本问题已经有最佳答案,请猛点这里访问。
所以,我想把一个字符串转换成一个标题大小写字符串。我已经编写了这段代码,但是当我运行这段代码时,得到了相同的小写字符串。有人能指出我的错在哪里吗?任何帮助都非常感谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function capitalize(str) { return str.toUpperCase(); } function titleCase(str1) { str1 = str1.toLowerCase(); var arr = str1.split(' '); var l = arr.length; var m; for (var i = 0; i < l; i++) { m = arr[i].length; for (var j = 0; j < m; j++) { if (j === 0) { arr[i][0] = capitalize(arr[i][0]); } else { arr[i][j] = arr[i][j]; } } } return arr; } titleCase("I'm a little tea potty"); |
我很肯定您之前就已经得到了关于这个问题的建议,但是使用ES5方法(您可以自己将其降级到
1 2 3 4 5 6 | function titleCase(str1) { return str1.toLowerCase().split(' ').map(function(word) { return word.charAt(0).toUpperCase() + word.slice(1); }).join(' '); } document.body.textContent = titleCase("I'm a little tea potty"); |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.4.1/es5-shim.min.js"> |
号
现在,你的代码是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function capitalize(str) { return str.toUpperCase(); } function titleCase(str1) { str1 = str1.toLowerCase(); var arr = str1.split(' '); var l = arr.length; var m; for (var i = 0; i < l; i++) { m = arr[i].length; for (var j = 0; j < m; j++) { if (j === 0) { arr[i][0] = capitalize(arr[i][0]); } else { arr[i][j] = arr[i][j]; } } } return arr; } document.body.textContent = titleCase("I'm a little tea potty"); |
让我们一点一点地看看:
1 2 3 | function capitalize(str) { return str.toUpperCase(); } |
。
上面没有什么问题,只是功能化似乎没有什么意义。
所以,现在我们有了你的函数,你得到一个参数(一个字符串),然后把它都放在小写的位置。
1 2 | function titleCase(str1) { str1 = str1.toLowerCase(); |
所以你的绳子
1 2 3 | var arr = str1.split(' '); var l = arr.length; var m; |
。
随着你的字符串出现,变成了
1 | for (var i = 0; i < l; i++) { |
。
因此,对于数组(迭代)中的每个单词(字符串),您得到字符串的长度,第一个
1 | m = arr[i].length; |
然后您打算迭代单词中的每个字符,这很好
1 | for (var j = 0; j < m; j++) { |
。
那么,你是说,如果它是单词的第一个字符,那么我想要一个大写字母,否则就不要用它了。
1 2 3 4 5 | if (j === 0) { arr[i][0] = capitalize(arr[i][0]); } else { arr[i][j] = arr[i][j]; } |
但问题是,您试图将字符写回字符串,这是不可变的。没有错误被抛出,只是什么都没有改变,就像字符串有一个只读开关,就像在存储卡上一样。所以你的循环会一直持续下去,什么都不做,直到一切都完成。然后返回数组。
1 | return arr; |
。
令人惊讶的是,这和你把句子分成单词的时候是一样的。埃多克斯1〔9〕
这里有一条船
1 2 3 4 5 6 7 | function titleCase(str) { return str.split(' ').map(function(s){ return s.slice(0, 1).toUpperCase() + s.slice(1); }).join(' '); } titleCase("I'm a little tea potty"); |
号
我改变了你的密码。这对你有帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function capitalize(str) { return str.toUpperCase(); } function titleCase(str1) { str1 = str1.toLowerCase(); var arr = str1.split(' '); var l = arr.length; var m; for (var i = 0; i < l; i++) { m = arr[i].length; arr[i] = capitalize(arr[i][0])+arr[i].substr(1); } return arr; } titleCase("I'm a little tea potty"); |
号