let*_*tda -2 javascript arrays for-loop
我正在尝试将给定字符串的每个首字母大写,但是每次运行代码时都会出现以下错误:
TypeError:val [i] .charAt(...).toUpperCase(...).join不是函数
function titleCase(str) {
var strArry = str.toLowerCase().split(' ');
strArry.map(function (val) {
for (var i = 0; i < val.length; i++) {
return val[i].charAt(0).toUpperCase().join(' ') + strArry[i].splice(1);
};
});
}
titleCase("I'm a little tea pot");
Run Code Online (Sandbox Code Playgroud)
String.protoype.toUpperCase()返回一个字符串,并且Array.prototype.join()在Array原型上,而不是字符串.
你可能想要这样的东西......
return val[i].charAt(0).toUpperCase() + val[i].slice(1);
Run Code Online (Sandbox Code Playgroud)
......或者甚至可能更好(至少更短)......
function titleCase(str) {
return str.replace(/\b[a-z]/g, function(match) { return match.toUpperCase(); });
}
Run Code Online (Sandbox Code Playgroud)
在这里,我使用正则表达式匹配单词边界后的第一个小写字母,然后使用自定义替换程序将其返回大写.
如果您支持的不仅仅是拉丁语,请使用Unicode范围来选择字符.