js对象属性名驼峰式转下划线

一、题目示例:

思路:

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

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

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

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

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

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

二、实现代码

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}

  

原文地址:https://www.cnblogs.com/detanx/p/JSObjBename.html

时间: 2024-08-28 14:07:57

js对象属性名驼峰式转下划线的相关文章

MyBatis数据库字段和实体对象属性名不一致的解决方案

数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如名字是一样的,只是分隔方式不一样,在数据库中使用了下划线分隔,而在对象中使用了驼峰分隔,如果都是这样子的话倒不是特别麻烦,只需要在mybatis的配置文件中开启驼峰转换即可. <setting name="mapUnderscoreToCamelCase" value="t

js对象属性 通过点(.) 和 方括号([]) 的不同之处

//    js对象属性 通过点(.) 和 方括号([]) 的不同之处 //    1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js程序中, //它们不是数据类型,因此程序无法修改它们. //    2.中括号操作符: 动态的.方括号里必须是一个计算结果为字符串的表达式,属性名通过字符串表示.字符串是js的数据类型, //再程序运行时可以修改和创建它们. // 主要有以下区别:     //1.[]--可以用变量作为属性名或访问

遍历js对象属性

<script type="text/javascript"> var p = { a:'a', e:{ a:'a', c:'c' }, b:'1', c:{ a:2, x:'fffff', y:{ ee:'fff', f:200 } } } ; //遍历js对象属性 var ObjInfo = { /** @param obj 要遍历的对象 @param placeholder 占位符,排版用,如空格 */ info : function(obj,placeholder)

第一篇 动态对象属性名、遍历对象

1.动态对象属性名 // 对象属性名和属性值, 常常遇到通常是属性值是变动的,名字是不变的 如: var a = '33'; var b= {first: a}; // 属性名也能动态使用 写法 其实也看到过 var a = 'fl'; var b[`${a}-xy`] = 'fang'; //动态写法 这只能定义一个属性名 // 有大括号的动态写法 var a = 'fl'; var b = { [`${a}-xy`]: true, [`${a}-ytj`]: true } 2.遍历对象 va

js对象属性的命名规则

JS标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只包含空格的字符串和空字符串): 通过.操作符为对象添加属性时,属性名称必须是合法的标识符名称: 如果属性名包含非法的标识符字符,则只能采用obj["propertyName"]的形式: 如果属性名是合法的标识符,读取时即可以采用obj.propertyName,也可以采用obj["

JS对象属性中get/set与getter/setter是什么

在js属性描述符这部分有几个较难理解的名词概念,本文旨在描述对它们的理解,主要包括:[[Get]]/[[Put]].get/set.getter/setter几个概念的阐述,数据属性和访问器属性. 属性 首先我们要搞清楚属性的概念,属性是存储在特定命名位置的值,是对象的内容,属性并不直接存储在对象容器内部.属性有两种类型:数据属性和访问器属性.属性具备了属性描述符,用来描述属性拥有的特性. 属性描述符 属性描述符用来描述属性特性的(只有在内部才能用的特性),配置属性是否可读,是否可写,是否可枚举

js对象-属性遍历

为了加强js对象的认知,又刷了一题. 直接上题目: 找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)1.返回数组,格式为 key: value2.结果数组不要求顺序 示例: //输入 var C = function() {this.foo = 'bar'; this.baz = 'bim';}; C.prototype.bop = 'bip'; iterate(new C()); //输出 ["foo: bar", "baz: bim&quo

正则表达式驼峰标示转下划线

humpToUnderline /** * 驼峰转下划线 * @param humpString * created by hbd 20160722 * @return */ public String humpToUnderline(String humpString) { if(BlankUtil.isEmpty(humpString)) return ""; String regexStr = "[A-Z]"; Matcher matcher = Patter

ES6基础之——对象属性名

有一个叫food的空白对象,往这个对象里面添加属性可以用点的方式,比如: let food={} food.dessert='cake'; console.log(food) //{dessert:'cake'} 如果属性的名字包含空格,继续使用点的方式来添加属性的话,输出food的时候就会报语法错误 let food={} food.dessert='cake'; food.hot drink = 'tea'; console.log(food) //Uncaught SyntaxError: