js对象属性驼峰式命名(带数字)转下划线命名

将类似于 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
    }

下属两种解决方案:可谓相当潇洒的答案,一行搞定

// segmentDefault回答者 asseek 的答案: 
const toLine = hump => hump.replace(/([A-Z]|\d)/g, (a, l) => `_${l.toLowerCase()}`);

var info = {
  id: 1,
  id1: 2,
  userName1: '刘玄德',
  userName2: '刘玄德',
  userName3: '大哥',
  userAge: 45,
  userAge1: 46,
  userAge2: 47
};
var newObj = {}
for (let k in info) {
  newObj[toLine(k)] = info[k]
}
console.log(newObj)

本人的答案,想了很久,asseek 的答案可谓是天上飞,我的答案就是地上爬了

<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
    }

    function copy(obj){//用于复制一个对象
      var newobj = {};
      for ( var attr in obj) {
          newobj[attr] = obj[attr];
      }
      return newobj;
    }
    var changeObj = function (obj) {
      var copyobj = copy(obj)
      var regNum = new RegExp(/\d/)
      var regStr = new RegExp(/[A-Z]/g)
      var arr = Object.keys(obj);

      var newObj = {}
      arr.forEach((k, index) => {
        var kArr = k.split('')
        var newK = ''
        kArr.forEach((item,index)=>{
          if(regNum.test(item)){
            kArr[index] = "_" + item
          }
          if(regStr.test(item)){
            kArr[index] = "_" + item.toLowerCase()
          }
        })
        newKey = kArr.join('')
        newObj[newKey] = obj[k]
        console.log(newKey)
        
      })
      console.log(newObj)
      return newObj
    }
    changeObj(info)
  </script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值