【问题标题】:Capitalize first letter of each word in JSJS中每个单词的首字母大写
【发布时间】:2017-08-02 23:58:14
【问题描述】:

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

【问题讨论】:

  • 也许是时候接受这些答案之一了?

标签: javascript


【解决方案1】:

您可以使用以下代码行:

function toUpper(str) {
return [str.split('')[0].toUpperCase(), str.split('').slice(1, str.split('').length).join("")].join("")
}

基本上它会拆分所有字符,对其进行切片,创建一个没有第一个条目/字符的新数组,并将第一个条目/字符替换为该字符的大写版本。

(是的,这是经过测试的,它可以在 Edge、Chrome 和更新版本的 Internet Explorer 上运行。)

这可能不是最好的答案,但希望它对你来说足够好。

【讨论】:

  • 添加空检查以获得更好的答案
【解决方案2】:

这是另一种将句子/名称/...大写的简洁方法:

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'

【讨论】:

  • 请补充说明
【解决方案3】:

使用 ES6

let captalizeWord = text => text.toLowerCase().split(' ').map( (i, j) => i.charAt(0).toUpperCase()+i.slice(1)).join(' ')

captalizeWord('cool and cool')

【讨论】:

    【解决方案4】:

    一个不错的简单解决方案,使用纯 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;
    }
    

    【讨论】:

      【解决方案5】:

      正则表达式/\b\w/ 匹配word boundary 后跟一个单词字符。您可以将其与replace() 字符串方法一起使用来匹配然后替换此类字符(没有g(全局)正则表达式标志,仅替换第一个匹配的字符):

      > '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 ...'
      
      

      【讨论】:

      • 请在您的示例旁边添加一些解释。简单地在代码 sn-p 中抛出一些正则表达式对理解这个想法没有多大帮助。
      • 好的。天哪,对不起,我认为这是不言自明的。
      【解决方案6】:

      整句只大写一行

      "my name is John".split(/ /g).map(val => val[0].toUpperCase() + val.slice(1)).join(' ')
      

      输出“我叫约翰”

      【讨论】:

        【解决方案7】:
        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(' ')带空格的数组并返回新大写的字符串

        【讨论】:

          【解决方案8】:

          如果数组将第一个字母设置为大写并与索引 1 中的其他字母连接,则只需映射。 数组不是你的情况。

          const capitalizeNames = (arr) => {
          arr.map((name) => {
              let upper = name[0].toUpperCase() + name.substr(1)       
              console.log(upper)
          })
          

          }

          【讨论】:

            【解决方案9】:
            function toTitleCase(str)
            {
              return str.replace(/\w\S*/g, function(txt){return 
              txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
            }
            

            【讨论】:

              【解决方案10】:
              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');
              

              【讨论】:

                【解决方案11】:

                考虑一个带有隐式返回的箭头函数:

                word => `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}` 
                

                这将在一行中完成。

                【讨论】:

                  【解决方案12】:

                  这是一个快速代码 sn-p。这段代码 sn-p 将允许您使用 JavaScript 将字符串的首字母大写。

                  function CapitlizeString(word) 
                  {
                      return word.charAt(0).toUpperCase() + word.slice(1);
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    或者您可以节省大量时间并使用 Lodash

                    看看
                    https://lodash.com/docs/4.17.4#startCase - added/edited-
                    https://lodash.com/docs/4.17.4#capitalize

                    例如

                    -添加/编辑-
                    您可能会使用 startCase,另一个用于将每个单词的首字母大写的函数。

                    _.startCase('foo bar'); 
                    // => 'Foo Bar'
                    

                    并且仅将句子的第一个字母大写

                    _.capitalize('FRED');
                    // => 'Fred'
                    

                    Lodash 是一个漂亮的 js 库,旨在为您节省大量时间。

                    在那里你会发现很多用于字符串、数字、数组、集合等的节省时间的函数。

                    您也可以在客户端或服务器 (nodejs) 端使用它,使用 bower 或 node、cdn 或手动包含它。

                    【讨论】:

                    • 这只会使整个字符串的第一个字母大写_.capitalize('first second') // =&gt; 'First second',并且问题表明他希望每个单词都以大写字母开头。如果您打算只替换第一个字母,则应指定这不是完整的解决方案
                    • 这就是lodash的美妙之处,那么你可以使用_.startCase('foo bar'); // Foo Bar,或者对于不同的结果,您可以使用其他函数作为示例 _.toUpper('fooBar'); // FOOBAR
                    • 这肯定是最干净和最好的方法。只需使用:_.startCase(_.capitalize('foo bar')),即使你有一个像FOO BAR 这样的字符串,它也会在Foo Bar 中转换
                    • 如果您想删除 '-' 或 '/' 并将字符串大写,这也很好
                    【解决方案14】:
                    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");
                    

                    【讨论】:

                      【解决方案15】:

                      答案的主要部分向您解释了 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 "))

                      【讨论】:

                        【解决方案16】:

                        word.substr(i) 中,参数表示单词的索引。此方法将单词从索引等于i 的字母中剪切到单词的末尾。 您还可以添加另一个参数,例如word.substr(i, len),其中len 表示字符分割的长度。例如: 'abcde'.substr(1, 2)bc.

                        【讨论】:

                          【解决方案17】:

                          substr 是一个函数,它返回(从链接的 MDN)包含给定字符串的提取部分的新字符串(从您的 second 字符开始功能)。还有一个关于 polyfill 实现的注释,它添加了 Get the substring of a string

                          【讨论】:

                          • substrsubstring”不正确。您的意思是“substr子字符串”吗?
                          【解决方案18】:

                          这是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));

                          因此,他们将每个单词的第一个字母大写,然后添加单词的其余部分。 Ance,因为您只是将第一个字母大写,因此开始的索引始终是 1

                          【讨论】:

                            【解决方案19】:

                            返回值包含两部分:

                            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"))

                            【讨论】:

                            • 非常好!解释很好,代码运行良好。
                            猜你喜欢
                            • 2020-08-30
                            • 2016-12-05
                            • 2015-11-10
                            • 2013-12-15
                            • 1970-01-01
                            • 2016-12-23
                            • 2015-11-04
                            • 2012-11-11
                            • 1970-01-01
                            相关资源
                            最近更新 更多