javascript - 标题大小写句子

标签 javascript string

<分区>

所以,我想将一个字符串转换为标题大小写字符串。我已经编写了这段代码,但是当我运行它时,我得到的是相同的小写字符串。谁能指出我错在哪里?任何帮助深表感谢。

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 循环)。

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");
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.4.1/es5-shim.min.js"></script>

现在,你的代码怎么了?

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");

让我们一点一点地看:

function capitalize(str) {
  return str.toUpperCase();
}

除了功能化似乎毫无意义之外,以上内容没有任何问题。

所以,现在我们有了您的函数,您接受一个参数(一个字符串),然后将其全部小写

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

所以你的字符串 "I'm a little tea potty" 变成了 "i'm a little tea potty"。到目前为止,一切都很好。然后在空格处拆分它。

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

随之而来的是你的字符串,它变成了 var arr = ["i'm","a","little","tea","potty"];l 变为 5,即这个数组的长度。 接下来你打算遍历数组arr,看起来不错

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

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

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;

令人惊讶的是,这与将句子拆分为单词时一样。 ["我是","a","little","tea","potty"]

关于javascript - 标题大小写句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469067/

相关文章:

javascript - 找出所有字符串的公共(public)部分

javascript - 用 jQuery 替换正斜杠

使用 strtok() 比较两个字符串

javascript - Highcharts:无法读取未定义的属性 'parts/Globals.js'

javascript - 将点击功能条件添加到当前按钮功能

javascript - Jquery的scroll()函数不起作用

javascript - Angular 中的拖放事件

javascript - 确定变量是增加还是减少?

SQL Split - 插入分层表结构

java - 当 else 语句将错误消息输出为字符串时,JUnit 测试方法