我正在学习如何将字符串中每个单词的第一个字母大写,对于这个解决方案,我理解除了word.substr(1)部分之外的所有内容。我看到它添加了破碎的字符串但是(1)如何工作?
function toUpper(str) {
return str
.toLowerCase()
.split(' ')
.map(function(word) {
return word[0].toUpperCase() + word.substr(1);
})
.join(' ');
}
console.log(toUpper("hello friend"))
答案 0 :(得分:16)
返回值包含两部分:
return word[0].toUpperCase() + word.substr(1);
1)word[0].toUpperCase()
:这是第一个大写字母
2)word.substr(1)
除了已被大写的第一个字母之外,整个字仍然有效。这是substr如何运作的文档。
如果要调试,请参阅以下结果:
function toUpper(str) {
return str
.toLowerCase()
.split(' ')
.map(function(word) {
console.log("First capital letter: "+word[0]);
console.log("remain letters: "+ word.substr(1));
return word[0].toUpperCase() + word.substr(1);
})
.join(' ');
}
console.log(toUpper("hello friend"))
答案 1 :(得分:10)
或者你可以节省很多时间并使用Lodash
看看
https://lodash.com/docs/4.17.4#startCase -added / edited-
https://lodash.com/docs/4.17.4#capitalize
实施例
- 增加/ edited-
您可以使用startCase,这是另一个用于将每个单词的首字母大写的函数。
_.startCase('foo bar');
// => 'Foo Bar'
并仅使用句子上的第一个字母
_.capitalize('FRED');
// => 'Fred'
Lodash是一个美丽的js库,可以为您节省大量时间。
在那里你会发现很多时间保护函数用于字符串,数字,数组,集合等。
您也可以在客户端或服务器(nodejs)端使用它,使用bower或node,cdn或手动包含它。
答案 2 :(得分:4)
function titleCase(str) {
return str.toLowerCase().split(' ').map(x=>x[0].toUpperCase()+x.slice(1)).join(' ');
}
titleCase("I'm a little tea pot");
titleCase("sHoRt AnD sToUt");
答案 3 :(得分:3)
正则表达式/\b\w/
与word boundary匹配,后跟一个单词字符。您可以将其与replace()
字符串方法配合使用,然后替换这些字符(不替换g
(全局)regexp标志,仅替换第一个匹配的char):
> 'hello my name is ...'.replace(/\b\w/, (c) => c.toUpperCase());
'Hello my name is ...'
> 'hello my name is ...'.replace(/\b\w/g, (c) => c.toUpperCase());
'Hello My Name Is ...'
答案 4 :(得分:3)
答案的主要部分向您解释了如何使用substr(1)。我给你一个更好的方法来解决你的问题
function capitalizeFirstLetters(str){
return str.toLowerCase().replace(/^\w|\s\w/g, function (letter) {
return letter.toUpperCase();
})
}
说明:
- 首先将整个字符串转换为小写字母
- 第二次检查整个字符串的第一个字母,检查之前有空格字符的第一个字母,并使用.toUpperCase()
方法替换它。
检查此示例:
function capitalizeFirstLetters(str){
return str.toLowerCase().replace(/^\w|\s\w/g, function (letter) {
return letter.toUpperCase();
})
}
console.log(capitalizeFirstLetters("a lOt of words separated even much spaces "))
答案 5 :(得分:1)
function titlecase(str){
let titlecasesentence = str.split(' ');
titlecasesentence = titlecasesentence.map((word)=>{
const firstletter = word.charAt(0).toUpperCase();
word = firstletter.concat(word.slice(1,word.length));
return word;
});
titlecasesentence = titlecasesentence.join(' ');
return titlecasesentence;
}
titlecase('this is how to capitalize the first letter of a word');
答案 6 :(得分:1)
substr
是一个函数,它返回(来自链接的MDN)一个新字符串,其中包含给定字符串的提取部分(从第二个字符开始)在你的功能)。还有对 polyfill 实现的评论,它添加获取字符串的子字符串。
答案 7 :(得分:0)
考虑带有隐式返回的箭头函数:
word => `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`
这将在一行中完成。
答案 8 :(得分:0)
在word.substr(i)
中,param表示单词的索引。此方法将单词从索引等于i
的字母切换到单词的结尾。
您还可以添加另一个参数word.substr(i, len)
,其中len
表示字符分段的长度。例如:
'abcde'.substr(1, 2)
→bc
。
答案 9 :(得分:0)
function toTitleCase(str)
{
return str.replace(/\w\S*/g, function(txt){return
txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
答案 10 :(得分:0)
只要数组将第一个字母设置为大写并与索引1中的其他字母连接,就可以进行映射。 数组不是您的情况。
const capitalizeNames = (arr) => {
arr.map((name) => {
let upper = name[0].toUpperCase() + name.substr(1)
console.log(upper)
})
}
答案 11 :(得分:0)
const capitalize = str => {
if (typeof str !== 'string') {
throw new Error('Invalid input: input must of type "string"');
}
return str
.trim()
.replace(/ {1,}/g, ' ')
.toLowerCase()
.split(' ')
.map(word => word[0].toUpperCase() + word.slice(1))
.join(' ');
};
trim()
对输入字符串进行消毒,以从开头和结尾删除空格使用RegExp
归一化并转换所有toLowerCase()
个字母
将字符串转换为空格处的数组split
将该数组映射为大写单词数组
join(' ')
带空格的数组,并返回新大写的字符串
答案 12 :(得分:0)
整个句子将仅大写一行
"my name is John".split(/ /g).map(val => val[0].toUpperCase() + val.slice(1)).join(' ')
输出“我的名字叫约翰”
答案 13 :(得分:0)
以下是substr
如何工作的示例:当您传入一个数字时,它会根据您提供的索引获取字符串的一部分:
console.log('Testing string'.substr(0)); // Nothing different
console.log('Testing string'.substr(1)); // Starts from index 1 (position 2)
console.log('Testing string'.substr(2));
因此,他们正在取每个单词的第一个字母,将其大写,然后添加剩下的单词。由于您只是将第一个字母大写,因此开始的索引始终为1
。
答案 14 :(得分:0)
一个很好的简单解决方案,使用纯JavaScript。 JSFiddle
function initCap(s) {
var result = '';
if ((typeof (s) === 'undefined') || (s == null)) {
return result;
}
s = s.toLowerCase();
var words = s.split(' ');
for (var i = 0; i < words.length; ++i) {
result += (i > 0 ? ' ' : '') +
words[i].substring(0, 1).toUpperCase() +
words[i].substring(1);
}
return result;
}
答案 15 :(得分:0)
使用ES6
let captalizeWord = text => text.toLowerCase().split(' ').map( (i, j) => i.charAt(0).toUpperCase()+i.slice(1)).join(' ')
captalizeWord('cool and cool')
答案 16 :(得分:0)
这是另一种将句子/名称/...大写的干净方法:
const capitalizeNames =(name)=>{
const names = name.split(' ') // ['kouhadi','aboubakr',essaaddik']
const newCapName = [] // declaring an empty array
for (const n of names){
newCapName.push(n.replace(n[0], n[0].toUpperCase()));
}
return newCapName.join(' ')
}
capitalizeNames('kouhadi aboubakr essaaddik'); // 'Kouhadi Aboubakr Essaaddik'