- 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中,驼峰式命名(带数字)转化为下划线命名的方法可以使用以下步骤:
- 首先,将驼峰式命名转换为小写。
javascript function camelToUnderscore(name) { return name.toLowerCase(); }- 然后,将数字替换为下划线。
javascript function camelToUnderscoreWithNumbers(name) { return name.replace(/(\d)/g, '_$1'); }- 最后,将结果合并为一个字符串。
javascript function camelToUnderscoreWithNumbersAndLowercase(name) { return camelToUnderscoreWithNumbers(name).toLowerCase(); }这个函数首先将驼峰式命名转换为小写,然后将数字替换为下划线。最后,将结果合并为一个字符串。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

