暴力简单版
只需要把数据所有的key,大小写都写上,就完事了!讲究的就是一个暴力。
const newUserInfo = {};
Object.keys(userInfo).forEach(name => {
newUserInfo[name.toLowerCase()] = userInfo[name];
newUserInfo[name.toUpperCase()] = userInfo[name];
})
方法获取版
写个方法,获取的时候,对key做一下大小写转换即可。
const getObjKey = (obj, key) => {
return obj[key.toLowerCase()] || obj[key.toUpperCase()]
}
proxy版
上一个版本会导致取值还需要额外调用方法,使用代理的方式可以优雅的处理
const newUserInfo = new Proxy(
{},
{
get: function (target, key: string) {
return target[key] || target[key.toLowerCase()];
},
set: function (target, key: string, value: any) {
target[key.toLowerCase()] = value;
return value;
},
}
);
Object.keys(userInfo).forEach(name => {
newUserInfo[key] = userInfo[name];
})
至此我的遇到的问题已经完全解决啦,但是这个方法并不完善,尤其是在写proxy
的时候,在设置属性为大小写混合时,仅仅使用toLowerCase
或者toUpperCase
是取不到的,所以在set
方法里加上了设置属性时强转为全小写。所以取值时也按照全小写取就好啦。