代码:
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]
的值不会改变。
答案 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"));