标题一句话

时间:2018-06-14 18:46:45

标签: javascript

代码:

function titleCase(str) {
let a = str.concat();
a = a.toLowerCase().split(" ");

let v = a.map(function(item){
item[0] = item[0].toUpperCase();
return item;
});
 
return v.join(" ");
}

console.log(titleCase("I'm a little tea pot"));//output should be "I'm A Little Tea Pot" but shows "i'm a little tea pot"

代码应该只显示最后一行注释中指示的输出。 item[0]的值不会改变。

4 个答案:

答案 0 :(得分:2)

使用一点正则表达式,你可以非常简单快速地完成这项工作

function titleCase(str) {
  return str.replace(/\s(\w)|^(\w)/g, e => e.toUpperCase())
}

console.log(titleCase("i'm a little tea pot"));

您的代码不起作用,因为字符串是不可变的,这意味着您无法像这样为其分配新值。如果你想保持你的循环,你可以使用下面的

function titleCase(str) {
  return str.split(' ').map(function(item){
    item = item.substring(0,1).toUpperCase() + item.substring(1);
    return item;
  }).join(' ');
}

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

答案 1 :(得分:1)

您还可以更正您的方法,如下所示



function titleCase(str) {
  return str.toLowerCase().split(" ").map(s => s[0].toUpperCase() + s.slice(1)).join(" ");
}

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




答案 2 :(得分:0)

item是一个字符串。字符串是不可变的。特别是,您无法分配单个字符来更改字符串。这就是item[0] = ...没有效果的原因。

有几种方法可以做到这一点。

构建新字符串,而不是尝试修改item



function titleCase(str) {
  const a = str.toLowerCase().split(" ");

  const v = a.map(function(item) {
    return item[0].toUpperCase() + item.substr(1);
  });

  return v.join(" ");
}

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




或者只使用正则表达式搜索/替换:



function titleCase(str) {
  return str.replace(/(^|\s)(\w)/g, function(m0, m1, m2) {
    return m1 + m2.toUpperCase();
  });
}

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




答案 3 :(得分:0)

添加一些console.log()以沿途调试代码。它可以帮助您了解字符串的转换方式。

   function titleCase(str) {
      // let a = str.concat(); // No need to concat a string.
      let words = str.toLowerCase().split(" ");

      // item is individual words
      let v = words.map(function(item){
        let title = item.charAt(0).toUpperCase() + item.slice(1) // You need to select letters by charAt(...)
        return title;
      });

      return v.join(" ");
    }

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