需求

给出一字符串,返回子字符首字符大写的字符串

titleCase("I'm a little tea pot") should return "I'm A Little Tea Pot".

思路1

  1. 字符串小写后切割为数组

  2. for循环操作数组元素的首字符

  3. 拼接字符

function titleCase(str) {
    var newArr = str.toLowerCase().split(' ');
    for(var i=0; i<newArr.length ; i++) {
        newArr[i] = newArr[i].replace(newArr[i][0],newArr[i][0].toUpperCase());
    }
    
    return newArr.join(" ");
}
titleCase("I'm a little tea pot");

思路2

  1. 字符串小写后切割为数组

  2. 利用map方法对数组元素统一风格化

function titleCase(str) {
    var newArr = str.toLowerCase().split(" ");
    newArr = newArr.map(function(val) {
        return val.replace(val[0],val[0].toUpperCase);
    });
    
    return newArr.join(" ");
}
titleCase("I'm a little tea pot");

思路三

  1. 直接对字符串小写化,replace操作

function titleCase(str) {
    return str.toLowerCase().replace(/(^|\s)\S/g, (val) => val.toUpperCase());
}
titleCase("I'm a little tea pot");

总结

三种思路其实都是先转化为小写字符,再通过str.replace()替换匹配项

相关

str.split()
  • 匹配separation来分割字符串,返回新数组,不改变原数组

str.replace(regexp|substr, newSubstr|function)
  • regexp (pattern)
    一个 RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。

  • substr (pattern)
    一个要被 newSubStr 替换的字符串。其被视为一整个字符串,而不是一个正则表达式。仅仅是第一个匹配会被替换。

  • newSubStr (replacement)
    用于替换掉第一个参数在原字符串中的匹配部分的 字符串。该字符串中可以内插一些特殊的变量名。参考下面的使用字符串作为参数。

  • function (replacement)
    一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的指定一个函数作为参数。

  • 返回值
    一个部分或全部匹配由替代模式所取代的新的字符串。

有其他好的方法或思路的道友,不妨在沙发区神交一番。


小石头
266 声望15 粉丝