嗨,
我正在练习Freecodecamp.com的一个基本算法。
说明如下。
返回提供的字符串,每个单词的第一个字母大写。确保单词的其余部分是小写的。 为了这个练习的目的,你也应该大写连词,如“的”和“的”。
这是我的密码。
const titleCase = str => {
let result = str.split(' ');
result = result.map(t => {
t = t.toLowerCase();
t[0] = t[0].toUpperCase();
return t;
});
return result.join(' ');
};
console.log(titleCase("I'm a little tea pot"));
结果i'm a little tea pot
我就是这么想的。
然而,一个问题是行:5不影响结果。第一封信不变。我是不是遗漏了什么,对吧?我似乎误解了一些关于地图方法的概念。你能给我一些建议吗?
提前谢谢。
发布于 2020-03-31 02:26:33
您的代码不能像您认为的那样工作的原因已经记录在MDN字符串文档中。
当使用括号符号进行字符访问时,尝试删除或为这些属性赋值将不会成功。所涉及的属性既不能写,也不能配置。
另一种方法是将第一个字符与其余字符串(不包括第一个字符)转换为大写字符。
const titleCase = str => {
return str.toLowerCase()
.split(' ')
.map(w => `${w[0].toUpperCase()}${w.substring(1)}`)
.join(' ');
};
console.log(titleCase("I'm a little tea pot"));
发布于 2020-03-31 02:28:52
看起来字符串上的赋值不像Javascript那样工作,太糟糕了,这在直觉上是正确的。
所以,使用不存在的字符串拼接,所以用str.split('')将字符串拆分成一个字符数组,然后使用数组拼接。
拼接修改输入数组的位置,因此不需要重新分配它。
const str = "hello";
var rayy = str.split(''); // ['h', 'e', 'l', 'l', 'o']
rayy.splice(0, 1, rayy[0].toUpperCase()); // returns ['h], but rayy is now modified in place to ['H', 'e', 'l', 'l', 'o']
const str2 = rayy.join(''); // "Hello"您对map的使用非常熟练和贴切。
发布于 2020-03-31 16:38:38
非常优雅地使用方法链接- split+map+join
和字符串${var1}${var2}的模式-在左后引号“` "
var1 - item.toUpperCase() -第一个符号toUpperCase
var2 - item.substring(1) -杀死第一个符号
.toLowerCase() - other symbols toLowerCase
const titleCase = (str) => str.split(' ')
.map(item => (`${item[0].toUpperCase()}${item.substring(1).toLowerCase()}`))
.join(' ')
console.log(titleCase("I'm a litTLE tea pot"));
https://stackoverflow.com/questions/60942420
复制相似问题