我的代码出了什么问题?每个单词的首字母应该大写

时间:2018-02-06 07:35:20

标签: javascript

function titleCase(str) {
  var str1 = str.match(/\S+\s*/g);
  var str2;
  for(var i = 0; i < str1.length; i++){
    str2 = str1[i].toLowerCase().replace(str1[i].charAt(0), str1[i].charAt(0).toUpperCase());        
  }
  return str2.join(' '); 
}

titleCase("I'm a little tea pot");

我的代码出了什么问题? str2.join不是函数

3 个答案:

答案 0 :(得分:1)

最简单的方法是在每个空格上拆分字符串,然后将数组中每个元素的第一个字母设置为字母的大写版本并加回来。

您正在做的是将结果的值分配给 str2 ,具有字符串类型而不是数组,这就是加入不适合您的原因。

function titleCase(str) {
    const words = str.split(' ');
    for (let i = 0; i < words.length; i++) {
        words[i] = words[i][0].toUpperCase() + words[i].slice(1);
    }
    return words.join(' ');
}

略有不同的变体,有些ES6赞成它:

const titleCase = str => {
    const result = [];
    for (const word of str.split(' ')) {
        result.push(word[0].toUpperCase() + word.slice(1));
    }
    return result.join(' ');
};

如果要确保标签,换行符等空格字符有效,可以使用正则表达式进行拆分,或者用空格替换所有空格字符,例如:

const words = str.replace(/\s/g, ' ').split(' ').filter(word => word !== '');

答案 1 :(得分:1)

function titleCase(str) {
  var str1 = str.match(/\S+\s*/g);
  var str2 = []; 
  for(var i = 0; i < str1.length; i++){

    str2[i] = str1[i].replace(str1[i].charAt(0), str1[i].charAt(0).toUpperCase());        
  }
  return str2.join(' '); 
}

titleCase("I'm a little tea pot");

答案 2 :(得分:-1)

这是解决您问题的简单方法。但是,有很多方法可以获得相同的结果,这是其中之一。

function capitalize(str) {
  let str2 = str[0].toUpperCase();
  return str.replace(str[0], str2);
}