暴力简单版

只需要把数据所有的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方法里加上了设置属性时强转为全小写。所以取值时也按照全小写取就好啦。

扩展阅读