如何使用简单的子字符串函数在javascript中标题句子?

时间:2016-08-18 11:39:47

标签: javascript

我试图为一个字符串标题,该字符串仅大写每个单词中的第一个字符。 我尝试使用以下代码执行此操作。这是我迄今为止所做的。



function titleCase(str) {
 var lowstr = str.toUpperCase();
  var array=lowstr.split(' ');
  var arr;
  var arr1;
   for(var i=0;i<array.length;i++)
    {
      arr1=array[i].substring(0,1); 
      
      for(var j=0;j<array[i].length;j++)
        {
      arr=array[j].substring(1).toLowerCase();
        }
      arr=arr1.concat(arr);     
    }
        array.join(" ");
  return array;
}

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

5 个答案:

答案 0 :(得分:2)

看起来好像你试图在titleCase功能中做太多。我会稍微采用一种略微不同的方法,即单一责任原则

我会...

  1. titleCase一个单词的功能。
  2. titleCases句子中每个单词的功能。
  3. 实施例

    function titleCaseSingleWord(word) {
    
        if (word.length === 0) {
            return "";
        }
    
        var result = word[0].toUpperCase();
        for (var i = 1; i < word.length; i++) {
            result += word[i].toLowerCase();
        }
    
        return result;
    }
    
    function titleCaseSentence(sentence) {
        var titleCasedWords = [];
    
        var words = sentence.split(" ");
        for (var i = 0; i < words.length; i++) {
            var word = words[i];
            var titleCasedWord = titleCaseSingleWord(word);
            titleCasedWords.push(titleCasedWord);
        }
    
        return titleCasedWords.join(" ");
    }
    
    console.log(titleCaseSentence("im a liTTLE teapot"));
    // "Im A Little Teapot"
    

    多功能背后的推理:

    • 它可以更轻松地测试每个单独的功能并更快地找到错误。它还有助于保持您的功能浅薄。

    说明:

    • 这些功能有点乱,可以做一些重构,但我会把它留给你作为一个小型练习。

    • 此外,可以进一步说明titleCaseSentence正在分割单词 titleCasing它们,因此它应该进一步拆分。无论你是否愿意这样做,这完全取决于你。

答案 1 :(得分:1)

正则表达式解决问题的方法:

&#13;
&#13;
console.log(
//Base string
"i'm a little tea pot"
//Enforce lowercase
  .toLowerCase()
  //Regular expression replace with uppercase
  .replace(
    /(\s+.)|^\w/ig,
    function(v) {
      return v.toUpperCase();
    })
);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你将它们全部设置为大写,然后找到应该是小写的字母。

我所做的恰恰相反。我开始用

开始

arr = str.split(" ")

然后你可以去

for(var x = 0; x < arr.length; x++)

arr[x].substring(0,1) = arr[x].substring(0,1).toUpperCase()

然后加入他们。

无法理解为什么你需要一个嵌套循环。

答案 3 :(得分:0)

如果你愿意放弃子串并考虑更多功能性的话。方法,试试这个。

String.prototype.titleCase = function() {
    t = this.toLower().split(' ').map((word) => word.charAt(0).toUpperCase()+word.slice(1)).join(' ');
    return t;
}

由于我已经在String.prototype上声明了该函数,因此可以使用它:

"This is a title".titleCase() // >> "This Is A Title"

这可能不是报纸编辑所拥有的100%,但它确实是你希望它做的事情。如果您需要解释,请告诉我。

此外,如果您希望使用函数:TitleCase("some sentence here"),您可以轻松地重构代码。如果您需要进一步解释,请告诉我。

答案 4 :(得分:-1)

检查出来..

function titleCase(str) {

 var arr=str.split('');
 var array=[];

for(var x=0;x<arr.length;x++)
   { if(x==0){
  array[x]=arr[x].toUpperCase();
  x++;
      }

 array[x]=arr[x].toLowerCase();

  if(arr[x]==' ')
    {
      array[x+1]=arr[x+1].toUpperCase();
      x++;
    }
}
var st=array.join('');
return st;
 }

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