【问题标题】:substr() not behaving as expected to concatenate string javascriptsubstr() 未按预期连接字符串 javascript
【发布时间】:2014-01-02 20:52:58
【问题描述】:

我正在尝试创建一个函数,该函数以驼峰式大小写返回一个字符串,其中有连字符的每个字母都大写。 即"this-should-be-camel-case" 将返回"thisShouldBeCamelCase"

我已将每个单词的首字母改为大写并删除为连字符,但无法返回完整的句子。我试过玩substrsubstring 无济于事,不确定它们是否是我想要用于任务的东西。

我应该用什么来返回骆驼案例中的句子?我该怎么做呢 ? 谢谢

function camelCaseIt(str) {

for(var i = 0; i < str.length; i++) {

    if(str[i] == '-') {
        var chgLtr = str[i] = '';
        var uprCase = str[i+1].toUpperCase();

    }
}
return str;
}

alert(camelCaseIt('this-should-be-camel-cased'));

【问题讨论】:

    标签: javascript string function for-loop


    【解决方案1】:

    这可以通过正则表达式相当简单地完成:

    function camelCaseIt(str) {
        return str.replace(/-([a-z])?/g, function(v) { return (v.length > 1 ? v[1].toUpperCase() : ''); });
    }
    

    【讨论】:

    • 不错,或者更简单的表达式:str.replace(/-(\w)/g, function (m, c) { return c.toUpperCase(); })
    【解决方案2】:

    将字符串的字符作为字符数组进行索引可能不适用于所有浏览器(这是 EMCAScript 5 之前的非标准行为)。虽然它适用于兼容最新 JS 标准的浏览器,但如果您想支持旧版浏览器,则不应使用该语法。 (即使在 EMCAScript 5 中,您也不能这样做,例如 str[i] = ''。)

    function camelCaseIt(str) {
        // create an array ['this', 'should', 'be', 'camel', 'cased']
        var parts = str.split('-');
    
        // start at i = 1 to skip the first word
        for (var i = 1; i < parts.length; i++) {
            // create an array ['s', 'h', 'o', 'u', 'l', 'd']
            var ltrs = parts[i].split('');
            // ltrs is now ['S', 'h', 'o', 'u', 'l', 'd']
            ltrs[0] = ltrs[0].toUpperCase();
            // parts is now ['this', 'Should', 'Be', 'Camel', 'Cased']
            parts[i] = ltrs.join('');
        }
    
        // return thisShouldBeCamelCased
        return parts.join('');
    }
    

    【讨论】:

      【解决方案3】:

      在您的函数中,您将返回原始(未修改的字符串)。相反,您应该构建一个单独的(新)字符串并返回它:

      function camelCaseIt(str) {
          var modifiedString = '';
          for(var i = 0; i < str.length; i++) {
              if(str.charAt(i) == '-') {
                  // hyphen; if there is another character, upper-case it and append
                  if ((i + 1) < str.length) {
                      modifiedString = str.charAt(i + 1).toUpperCase();
                  }
              } else {
                  // normal character; append it as-is
                  modifiedString += str.charAt(i);
              }
          }
          return modifiedString;
      }
      

      但是,您应该能够使用简单的正则表达式完成同样的事情:

      str = str.replace(/-([a-z])/g, function (match) {
          return match[1].toUpperCase();
      });
      

      【讨论】:

      • 如果您想要数组样式的访问,您也可以使用str.split('-') 来生成一个数组,而不是使用str.charAt()
      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      相关资源
      最近更新 更多