将每个单词的第一个字母大写为JS

时间:2017-03-13 02:17:33

标签: javascript

我正在学习如何将字符串中每个单词的第一个字母大写,对于这个解决方案,我理解除了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"))

17 个答案:

答案 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'
相关问题