账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    求js驼峰式命名(带数字)转化为下划线命名的方法
    21
    0

    题目描述

    由于mysql数据表命名的关系,导致本人在开发项目时需要将驼峰式命名转化为下划线命名,类似于userName1转为user_name_1,经过我写的函数,部分属性可以转化,部分属性会出问题,求教大神指正!

    题目来源及自己的思路

    我使用正则表达式查询大写和数字,并在查询到那个字符前面添加“_”

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    
    <body>
    
    
      <script>
        var info = {
          id: 1,
          id1: 2,
          userName1: '刘玄德',
          userName2: '刘玄德',
          userName3: '大哥',
          userAge: 45,
          userAge1: 46,
          userAge2: 47
        }
    
        var info2 = {
          id: 1,
          id_1: 2,
          user_name_1: '刘玄德',
          user_name_2: '刘玄德',
          user_name_3: '刘玄德',
          user_age: 45,
          user_age_1: 46,
          user_age_2: 47
        }
    
        var changeObj = function (obj) {
          var regNum = new RegExp(/\d/)
          var regStr = new RegExp(/[A-Z]/g)
          var arr = Object.keys(obj);
          arr.forEach((k, index) => {
            console.log('=====打印k=========')
            // console.log(k)
            // debugger
            
            if (!regNum.test(k) && !regStr.test(k)) {//既无数字,也无大写
              console.log("既无数字,也无大写")
              console.log(k)
            }else if( regStr.test(k) ){//有大写
              console.log("检测到大写字母")
              var newK3 = k.replace(/([A-Z])/g, "_$1").toLowerCase();
              console.log(newK3)
    
              if(regNum.test(newK3)){
                console.log("检测到数字")
                newK4 = newK3.replace(/([0-9])/, "_$1");
                console.log(newK4)
              }
    
            }else{//有数字
              console.log("检测到数字")
              var newK = k.replace(/([0-9])/, "_$1");
              console.log(newK)
            }
            
          })
    
        }
        changeObj(info)
      </script>
    </body>
    
    </html>

    你期待的结果是什么?实际看到的错误信息又是什么?

    我希望将info转化为info2的形式

    var info = {
          id: 1,
          id1: 2,
          userName1: '刘玄德',
          userName2: '刘玄德',
          userName3: '大哥',
          userAge: 45,
          userAge1: 46,
          userAge2: 47
        }
    
        var info2 = {
          id: 1,
          id_1: 2,
          user_name_1: '刘玄德',
          user_name_2: '刘玄德',
          user_name_3: '刘玄德',
          user_age: 45,
          user_age_1: 46,
          user_age_2: 47
        }

    问题描述

    但是我在控制台看到的在userName_2就检测不到大写,打印信息如下:

    驼峰.html:39 =====打印k=========
    驼峰.html:44 既无数字,也无大写
    驼峰.html:45 id
    驼峰.html:39 =====打印k=========
    驼峰.html:58 检测到数字
    驼峰.html:60 id_1
    驼峰.html:39 =====打印k=========
    驼峰.html:47 检测到大写字母
    驼峰.html:49 user_name1
    驼峰.html:52 检测到数字
    驼峰.html:54 user_name_1
    驼峰.html:39 =====打印k=========
    驼峰.html:58 检测到数字
    驼峰.html:60 userName_2
    驼峰.html:39 =====打印k=========
    驼峰.html:47 检测到大写字母
    驼峰.html:49 user_name3
    驼峰.html:52 检测到数字
    驼峰.html:54 user_name_3
    驼峰.html:39 =====打印k=========
    驼峰.html:44 既无数字,也无大写
    驼峰.html:45 userAge
    驼峰.html:39 =====打印k=========
    驼峰.html:47 检测到大写字母
    驼峰.html:49 user_age1
    驼峰.html:52 检测到数字
    驼峰.html:54 user_age_1
    驼峰.html:39 =====打印k=========
    驼峰.html:58 检测到数字
    驼峰.html:60 userAge_2

    求教大神可不可以改正下我的代码,指出哪里出了问题?并且怎么改正呢?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 秋末♂残雪℡ 普通会员 1楼

      在JavaScript中,驼峰式命名(带数字)转化为下划线命名的方法可以使用以下步骤:

      1. 首先,将驼峰式命名转换为小写。

      javascript function camelToUnderscore(name) { return name.toLowerCase(); }

      1. 然后,将数字替换为下划线。

      javascript function camelToUnderscoreWithNumbers(name) { return name.replace(/(\d)/g, '_$1'); }

      1. 最后,将结果合并为一个字符串。

      javascript function camelToUnderscoreWithNumbersAndLowercase(name) { return camelToUnderscoreWithNumbers(name).toLowerCase(); }

      这个函数首先将驼峰式命名转换为小写,然后将数字替换为下划线。最后,将结果合并为一个字符串。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部