主要思路
- 新建一个待返回的result 对象;
- 拿到对象所有的key(Object.keys),遍历keys;
- 保存当前key对应的值 value;
- 正则匹配下划线格式;
- 匹配到话进行替换即可,替换使用replace函数,主要是使用replace的第二个参数
- 判断 value 是否为对象,是的话需要递归处理;
- 把新的key及value放入result中;
- 返回reslut 即可;
代码实现
function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
function transfer(originObj) {
// 函数首次调用判断
if (!isObject(originObj)) return originObj;
const result = {};
const reg = /_{1,2}\w/g; // 这里正则的格式取决于自己
const keys = Object.keys(originObj);
for(let key of keys) {
const value = originObj[key];
key = key.replace(reg, (match) => match.replace(/_/g, '').toLocaleUpperCase());
result[key] = isObject(value) ? transfer(value) : value;
}
return result;
}
String.prototype.replace 详情
MDN String.prototype.replace()
总结
实现思路其实有点类似于深拷贝的思路,不相同的地方在于没有处理 RegExp、Date、Symbol等这些类型的值,当然实现也是仅供参考,若有不对的地方可以评论区讨论;