繁体   English   中英

如何在Javascript中将字符串转换为标题大小写?

[英]How to convert a string to to Title Case in Javascript?

我想要一个函数,它在纯 Javascript 中将字符串中每个单词的第一个字母大写。

例如:

console.log(titleCase("I'm a little teapot"));
//I'm A Little Teapot

该函数不能使用.split.map

这是我尝试过的:

function titleCase(str) {
    str.toLowerCase();
    var string="";
    for(var i=0 ;i<str.length;i++){
        if(i===0){
            str[0].toUpperCase();
            string+=str[0];
        } else if(str[i]===" "){
            str[i+1].toUpperCase();
            string+=str[i]+str[i+1];
        }
        string+=str[i]; 
    }
    return  string;
}

这很冗长,但是,唉, titleCase没有任何“方法”:

var charDict = {'a':'A', 'b':'B', 'c':'C', ...};

function titleCase(str){
    var i = 0;
    var result = '';

    while (str[i]) {
        var char = str[i];
        if (((i === 0) || (str[i-1] === ' ')) && (char in charDict)) {
          result += charDict[char];
        }
        else {
          result += char;
        }
        i++;
    }
    return result;
}

请注意,您必须将每个字符添加到charDict中才能真正起作用。

我强烈不鼓励在生产代码中使用它。 相反,我会使用Aaron's first answer

最简单的方法是将拆分串入一个数组,映射在阵列中的每个项目到你想要的格式,然后加入再次阵列回字符串。

 function titleCase(str) { return str.split(" ").map(word => word.charAt(0).toUpperCase() + word.substring(1)).join(" "); } console.log(titleCase("I'm a little teapot"));

但是如果你不想使用 split 或 map,你可以这样做:

 function titleCase(str) { var newStr = ""; for (var i = 0; i < str.length; i++) { newStr += (i == 0 || str[i - 1] == " ") ? str[i].toUpperCase() : str[i]; } return newStr; } console.log(titleCase("I'm a little teapot"));

 let str = "the quick brown fox jumped over the lazy dog" let res = str.split(" ").map(word => { let arr = word.split("") return arr.map((let, idx) => idx === 0 ? let.toUpperCase() : let).join("") }).join(" ") console.log(res)

更新

没有 map() 或 split():

 let str = "the quick brown fox jumped over the lazy dog" let firstLet = false for(let i=0; i<str.length; i++){ if(i==0 || firstLet && str[i] !== " "){ str = str.substr(0, i) + str[i].toUpperCase() + str.substr(i + 1); firstLet = false } if(str[i] === " "){ firstLet = true } } console.log(str)

这是对上述代码的性能略有改进,操作次数和时间复杂度都更少。

const res = str.split(" ").map(word => 
    `${word.charAt(0).toUpperCase()+word.substr(1)}`
).join(" ")

另一种可能性是使用 ASCII:

public String upperCase(String words) {
 String res = "";
 for (int i = 0; i < words.length(); i++) {
  int ascii = (int) words.charAt(i);
  if (ascii > 96 && ascii < 123) {
   res += (char)(ascii - 32);
  } else {
   res += (char) ascii;
  }
 }
 return res;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM