我试图大写给定字符串的每个第一个字母,但是每次运行代码时都会出现以下错误:
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");
答案 0 :(得分:5)
String.protoype.toUpperCase()
返回一个字符串,Array.prototype.join()
在Array原型上,而不是字符串。
你可能想要这样的......
return val[i].charAt(0).toUpperCase() + val[i].slice(1);
......或者甚至可能更好(至少更短)......
function titleCase(str) {
return str.replace(/\b[a-z]/g, function(match) { return match.toUpperCase(); });
}
这里我使用正则表达式匹配单词边界后面的第一个小写字母,然后使用自定义替换程序将其返回大写字母。
如果您支持的不仅仅是拉丁语,请使用Unicode范围来选择字符。
答案 1 :(得分:3)
toUpperCase
返回String
,join
不是该原型的方法。
如果您在使用字符串之前检查代码并进行typeof
检查,则可以看到:
function titleCase(str) {
var strArry = str.toLowerCase().split(' ');
strArry.map(function (val) {
for (var i = 0; i < val.length; i++) {
var temp = val[i].charAt(0).toUpperCase();
console.log(typeof temp);
return temp;
};
});
}
titleCase("I'm a little tea pot");
&#13;
在您对join
进行映射后,您需要Array
生成最终的合并值。
答案 2 :(得分:0)
我提出了一段效果很好的简短代码:
var titleCase = (str) => str.split(" ").map(el => el[0].toUpperCase().concat(el.substr(1))).join(" ");
console.log(titleCase("I'm a little tea pot"));
答案 3 :(得分:0)
通过一点研究找出它并发现使用val和我一起尝试使用mpa()
function titleCase(str) {
var strArry = str.toLowerCase().split(' ');
var convert = strArry.map(function(val) {
return val.replace(val.charAt(0), val.charAt(0).toUpperCase());
});
return convert.join(' ');
}
titleCase("I'm a little tea pot");
答案 4 :(得分:-1)
我不熟悉Javascript,这就是为什么我不知道它是否会对char和string产生影响。
我很确定你的意思是做一个完全不同的事情,即返回一个用大写字母连接的字符串。你在这里(尝试)做的是在你的for循环的第一个循环之后返回表达式的结果(val [i] .andsoonandsoforth)。
表达式不起作用的原因是join(string)通常在字符串或字符数组上调用。你在一个角色上调用它!
解决方案是首先将字符串拆分为字符,将它们大写,将它们存储到数组中,在数组上调用join,然后返回该字符串。
或者只是在字符串上使用可能存在的内置大写函数。