免费代码营挑战 - 标题案例A句子

时间:2018-01-20 08:33:37

标签: javascript title-case

我目前正在接受Free Code Camp的第一次JS挑战。

我遇到了标题为Case Case a Sentence的挑战。在这个挑战中,我需要编写一个函数,将给定字符串中单词的每个首字母大写,并将所有其他字母小写。 Here's指向挑战的链接 我编写了以下代码,尝试完成以下操作:

SPLIT | str |到一个字母的阵列

DEFINE LOCAL VARIABLE | toCAP |在空间之后出现的每一封信|“”|

如果有空格后的信件

CAPITALIZE | LETTER |

PUSH | LETTER |不是

ELSE

| LETTER |被定义为信件

| LETTER |被降低了

| LETTER |被推送到信件索引

在没有间隔的情况下返回阵列

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

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

3 个答案:

答案 0 :(得分:0)

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

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

答案 1 :(得分: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;

}

答案 2 :(得分:0)

function titleCase(str) {
  return str.toLowerCase().split(' ').map((word) => (word.charAt(0).toUpperCase() + word.slice(1))).join(' ');
}