为什么不将join()识别为函数?

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)

ale*_*lex 5

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范围来选择字符.