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

时间:2016-07-06 15:52:57

标签: 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");

5 个答案:

答案 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返回Stringjoin不是该原型的方法。

如果您在使用字符串之前检查代码并进行typeof检查,则可以看到:

&#13;
&#13;
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;
&#13;
&#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,然后返回该字符串。

或者只是在字符串上使用可能存在的内置大写函数。