题目:将给定的JSON中所有带“_”的key转为驼峰写法(如果“_”出现在key的开头或结尾,直接删除),并输出最终的结果
// 将给定的JSON中所有带“_”的key转为驼峰写法(如果“_”出现在key的开头或结尾,直接删除),并输出最终的结果
// 示例:
// 输入:{
// name: 'Persons List',
// total_count: 2,
// persons_list: [
// {
// person_name: 'Tom',
// _gender: '1',
// age_: 37
// },
// {
// person_name: 'Rose',
// _gender: '0',
// age_: 18
// }
// ]
// }
// 输出:
// {
// name: 'Persons List',
// totalCount: 2,
// personsList: [
// {
// personName: 'Tom',
// gender: '1',
// age: 37
// },
// {
// personName: 'Rose',
// gender: '0',
// age: 18
// }
// ]
// }
解决:
/ 匹配下划线"_"与它后边的第一位字母,并将字母大写
function toUpper(data) {
return data.replace(/_(\w)/g,(item,upper) => {
return upper.toUpperCase()
})
}
function toHump(obj) {
if(obj instanceof Array) {
obj.forEach((item) => {
toHump(item)
})
}else if(obj instanceof Object) {
Object.keys(obj).forEach((key) => {
// 将出现在key的开头或结尾的下划线"_",直接删除
let newKey = key.replace(/^_|_$/gm,"")
newKey = toUpper(newKey)
if(newKey !== key) {
obj[newKey] = obj[key]
delete obj[key]
}
toHump(obj[newKey])
})
}
}
let obj = {
name: 'Persons List',
total_count: 2,
persons_list: [
{
person_name: 'Tom',
_gender_a_: '1',
age_: 37
},
{
person_name: 'Rose',
_gender: '0',
age_: 18
}
]
}
toHump(obj);
console.log(obj);
主要用到了字符串的 replace() 方法与正则表达式
replace()
该函数接收两个参数,
第一个参数可以是字符串或者正则表达式,描述了需要替换的子字符串;
第二个参数则可以是一个字符串或者一个回调函数,用来描述替换值。字符串是不可变对象,该函数不改变原字符串,返回值为替换后的字符串。
str.replace(regexp|substr, newSubStr|function)
例如:
// 字符串直接替换
let a = "asdf".replace("sd","wer")
console.log(a); // awerf
// 通过匹配替换字符串
// \d 匹配数字
let b = "asd45f6".replace(/\d/,"_")
console.log(b); // asd_5f6
// 函数的返回值替换字符串的匹配部分
// item,index,string 匹配部分,匹配部分的第一个索引,被匹配的字符串
let c = "asdfsd".replace("sd",(item,index,string) => {
console.log(item,index,string); // sd 1 asdf
// 匹配到的字母大写
return item.toUpperCase()
})
console.log(c) // aSDfsd
// 函数返回值替换正则匹配到的内容
// 匹配下划线和字母数字下划线 "_[a-zA-Z0-9_]"
let d = "_dffsc_fvv_ffd_".replace(/_(\w)/gm,(item) => {
return item.toUpperCase()
})
console.log(d) // _Dffsc_Fvv_Ffd_
正则匹配
匹配规则可以看 正则表达式-CSDN博客
推荐使用 regex101: build, test, and debug regex在线工具调试,基本使用方法可以看【正则表达式】regex101超好用的正则表达式测试和学习工具(内含使用教程、Python和C#正则表达式代码示例)_正则101-CSDN博客