js对象属性名驼峰式转下划线的实例代码


Posted in Javascript onSeptember 17, 2020

一、题目示例:

思路:

1、匹配属性名字符串中的大写字母和数字

2、通过匹配后的lastIndex属性获取匹配到的大写字母和数字的位置

3、判断大写字母的位置是否为首位置以及lastIndex是否为0,为0则表示匹配结束

4、将存放位置的数组进行从小到大排序,排序后将属性名按照字符串的slice方法切割并使用下划线重组

5、遍历对象的属性名并使用函数改变为新的命名,从新赋值到新的对象上(也可以使用改变对象的ES6新语法)

6、注意,每次在调用函数后,需要清空之前存放位置的数组

js对象属性名驼峰式转下划线的实例代码

二、实现代码

let obj = {Id1: 1, idName1: 2, idAgeName1: 3};
let arr = []
function strReplace(str) {
  const UP_CASE_REG =/[A-Z]/g;
  const NUMBER_REG=/[A-Za-z][\d]/g
  let newstr = ""
  getIndex(UP_CASE_REG, str)
  getIndex(NUMBER_REG, str)
  arr.sort((a,b)=> a-b )
  for(let i = 0;i < arr.length; i ++) {
    if(i === 0) {
      newstr += str.slice(0,arr[i]) + "_"
    }
    else {
      newstr += str.slice(arr[i-1],arr[i]) + "_"
    }
  }
  newstr += str.slice(arr[arr.length-1])
  return newstr.toLowerCase()
}
function getIndex(reg, str) {
  do{
    reg.test(str)
    if(reg.lastIndex !== 0 && reg.lastIndex-1 !== 0){//reg.lastIndex-1 !== 0判断首字母是否大写
      arr.push(reg.lastIndex-1)
    }
  }while(reg.lastIndex > 0)
}
 
function strAllReplace(obj) {
  let newObj = {}
  Object.entries(obj).forEach(([key, value]) =>
  {
   newObj[strReplace(key)] = value
   arr = []
  })
  return newObj
}
console.log(strAllReplace(obj))//{id_1: 1, id_name_1: 2, id_age_name_1: 3}

js对象属性名驼峰式转下划线的实例代码

补充知识:JavaScript 对象部署 Iterator 接口

如下所示:

const name = {
      first:"hello",
      last:"world",
      fullname: "hello world"
    }

方式一、Object.keys

for (var i of Object.keys(name)) {
        console.log(i,"-",name[i])
      }

js对象属性名驼峰式转下划线的实例代码

方法二、Object.keys + Generator

function *map(item) {
      for (var i of Object.keys(item)) {
        yield [i,item[i]]
      }
    }
    for(var [key, value] of map(name)) {
      console.log(key,"-",value)
    }

js对象属性名驼峰式转下划线的实例代码

注:generator函数中不能使用箭头函数

例:

*map = (item) => {
      for (var i of Object.keys(item)) {
        yield [i,item[i]]
      }
    }

js对象属性名驼峰式转下划线的实例代码

以上这篇js对象属性名驼峰式转下划线的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
Apr 25 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
浅析jquery的作用与优势
Dec 02 Javascript
javascript中处理时间戳为日期格式的方法
Jan 02 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
浅析jQuery Ajax通用js封装
Jun 22 Javascript
JS三目运算(三元运算)方法详解
Mar 01 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
Oct 26 Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
vue ref如何获取子组件属性值
Mar 31 Vue.js
详细分析JavaScript中的深浅拷贝
Sep 17 #Javascript
js实现鼠标滑动到某个div禁止滚动
Sep 17 #Javascript
原生js+css实现tab切换功能
Sep 17 #Javascript
vue使用screenfull插件实现全屏功能
Sep 17 #Javascript
Vue使用screenfull实现全屏效果
Sep 17 #Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
Sep 17 #Javascript
JavaScript编码小技巧分享
Sep 17 #Javascript
You might like
Home Coffee Roasting
2021/03/03 咖啡文化
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
简单介绍django提供的加密算法
2019/12/18 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
好习惯伴我成长演讲稿
2014/05/21 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
唐山大地震的观后感
2015/06/05 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电