关于javascript:标题案例句子

Title Case a Sentence

本问题已经有最佳答案,请猛点这里访问。

所以,我想把一个字符串转换成一个标题大小写字符串。我已经编写了这段代码,但是当我运行这段代码时,得到了相同的小写字符串。有人能指出我的错在哪里吗?任何帮助都非常感谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function capitalize(str) {
    return str.toUpperCase();
}

function titleCase(str1) {
    str1 = str1.toLowerCase();
    var arr = str1.split(' ');
    var l = arr.length;
    var m;

    for (var i = 0; i < l; i++) {
        m = arr[i].length;
        for (var j = 0; j < m; j++) {
            if (j === 0) {
                arr[i][0] = capitalize(arr[i][0]);
            }
            else {
                arr[i][j] = arr[i][j];
            }
        }
    }
    return arr;
}

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


我很肯定您之前就已经得到了关于这个问题的建议,但是使用ES5方法(您可以自己将其降级到for循环)。

1
2
3
4
5
6
function titleCase(str1) {
  return str1.toLowerCase().split(' ').map(function(word) {
    return word.charAt(0).toUpperCase() + word.slice(1);
  }).join(' ');
}
document.body.textContent = titleCase("I'm a little tea potty");
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.4.1/es5-shim.min.js">

现在,你的代码是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function capitalize(str) {
  return str.toUpperCase();
}
function titleCase(str1) {
  str1 = str1.toLowerCase();
  var arr = str1.split(' ');
  var l = arr.length;
  var m;

  for (var i = 0; i < l; i++) {
    m = arr[i].length;
    for (var j = 0; j < m; j++) {
      if (j === 0) {
        arr[i][0] = capitalize(arr[i][0]);
      } else {
        arr[i][j] = arr[i][j];
      }
    }
  }
  return arr;
}
document.body.textContent = titleCase("I'm a little tea potty");

让我们一点一点地看看:

1
2
3
function capitalize(str) {
  return str.toUpperCase();
}

上面没有什么问题,只是功能化似乎没有什么意义。

所以,现在我们有了你的函数,你得到一个参数(一个字符串),然后把它都放在小写的位置。

1
2
function titleCase(str1) {
  str1 = str1.toLowerCase();

所以你的绳子"I'm a little tea potty"来了,它变成了"I'm a little tea potty"。到现在为止,一直都还不错。然后在空格处拆分。

1
2
3
  var arr = str1.split(' ');
  var l = arr.length;
  var m;

随着你的字符串出现,变成了var arr = ["i'm","a","little","tea","potty"];l变成了5,这个数组的长度。接下来,您打算循环遍历数组arr,看起来不错。

1
for (var i = 0; i < l; i++) {

因此,对于数组(迭代)中的每个单词(字符串),您得到字符串的长度,第一个i'm3

1
m = arr[i].length;

然后您打算迭代单词中的每个字符,这很好

1
for (var j = 0; j < m; j++) {

那么,你是说,如果它是单词的第一个字符,那么我想要一个大写字母,否则就不要用它了。

1
2
3
4
5
  if (j === 0) {
    arr[i][0] = capitalize(arr[i][0]);
  } else {
    arr[i][j] = arr[i][j];
  }

但问题是,您试图将字符写回字符串,这是不可变的。没有错误被抛出,只是什么都没有改变,就像字符串有一个只读开关,就像在存储卡上一样。所以你的循环会一直持续下去,什么都不做,直到一切都完成。然后返回数组。

1
return arr;

令人惊讶的是,这和你把句子分成单词的时候是一样的。埃多克斯1〔9〕


这里有一条船

1
2
3
4
5
6
7
function titleCase(str) {
    return str.split(' ').map(function(s){
       return s.slice(0, 1).toUpperCase() + s.slice(1);
    }).join(' ');
}

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


我改变了你的密码。这对你有帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function capitalize(str) {
    return str.toUpperCase();  
}

function titleCase(str1) {
    str1 = str1.toLowerCase();
    var arr = str1.split(' ');
    var l = arr.length;
    var m;  

    for (var i = 0; i < l; i++) {
        m = arr[i].length;
        arr[i] = capitalize(arr[i][0])+arr[i].substr(1);        
    }  
    return arr;

}

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