1

我目前正在经历 Free Code Camp 的 First JS 挑战。

我在题为 Title Case a Sentence 的挑战中遇到了麻烦。在这个挑战中,我需要编写一个函数,将给定字符串中单词的每个首字母大写,并将所有其他字母小写。 这是我编写了以下代码的挑战的链接,试图完成以下任务:

拆分 |str| 到一个字母数组

定义局部变量 |toCAP| 致每一个空格后的字母 |" "|

如果一个字母在一个空格之后

大写 |字母|

推 |信| 反而

别的

|信| 被定义为字母

|信| 是小写的

|信| 被推到字母索引

返回没有间隔的阵列

function titleCase(str) {
  str.toLocaleLowerCase();
  var letterArray = str.split("");
  var letter = "";
  for (var i = 0; i < letterArray.length; i++) {
    if (i == 0) {
        letter = letterArray[0];
        letter.toUpperCase();
        letterArray[0] = letter;
    } else if (letterArray[i - 1] == " ") {
        letter = letterArray[i];
        letter.toUpperCase();
        letterArray[i] = letter;
    }
  } 
  return letterArray.join("");
}

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

为什么第二个条件不起作用,将每个单词的第一个字母大写?

4

3 回答 3

0

这是使用 forEach 循环而不是传统的 for 循环的替代方法 - 首先将传递的字符串拆分为单词,然后将每个单词拆分为字母。将第一个字母大写并将所有字母放入一个返回的数组中。

function titleCase(str) {
  var wordArray = str.toLowerCase().split(" ");
  var sentenceArray = [];

  wordArray.forEach(function(word) {
    var letters = word.split('');
    letters[0] = letters[0].toUpperCase();
    sentenceArray.push(letters.join(''))
  })
  return sentenceArray.join(" ");
}

console.log(titleCase("I'm a little tea pot"));
console.log(titleCase("sHoRt AnD sToUt"));
console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT"));

于 2018-01-20T08:47:46.603 回答
0
function titleCase(str) {
  return str.toLowerCase().split(' ').map((word) => (word.charAt(0).toUpperCase() + word.slice(1))).join(' ');
}
于 2020-02-11T00:34:33.920 回答
0

您希望首先将字符串设置为小写以考虑所有输入情况。我在代码中包含了一些注释。我取出的解决方案中有过多的字符串重新分配。你的第二个条件是没有正确选择字母,你想要 arr[i] 而不是 arr[i - 1]

function titleCase(str) {
  var newStr = str.toLowerCase(); //hold a lowercase version of str
  var letterArray = newStr.split("");
  var letter = "";
  for (var i = 0; i < letterArray.length; i++) {
    if (i == 0) { //test for first letter
     letterArray[0] = letterArray[0].toUpperCase(); //reassign as the uppercase version
    } else if (letterArray[i] == " ") {
     letterArray[i + 1] = letterArray[i + 1].toUpperCase(); //if space is detected, set the next letter to uppercase
    }
  } 
  return letterArray.join(""); //join into a string
}

这是我想出的解决方案:

function titleCase(str) {
  var newStr = str.toLowerCase();
  var result;
  var arr = newStr.split("");
  arr[0] = arr[0].toUpperCase();

  for (var i = 0; i < arr.length; i++){
    if (arr[i] === " "){
      arr[i + 1] = arr[i + 1].toUpperCase();
    }
  }

  result = arr.join("");

return result;

}
于 2018-01-20T09:37:40.380 回答