一、需求
使用js将对象的key转为全大写或者全小写。
二、以前的实现方案
在ES10出现之前一般的实现方案是这样的:
// 转换小写
function key2Lower(obj) {
for (var key in obj) {
obj[key.toLowerCase()] = obj[key];
delete(obj[key]);
}
return obj;
}
// 转换大写
function key2Upper(obj) {
for (var key in obj) {
obj[key.toUpperCase()] = obj[key];
delete(obj[key]);
}
return obj;
}
//或者--------------------------------------
function key2Lower(obj) {
let newO = {};
for (var key in obj) {
newO[key.toLowerCase()] = obj[key];
}
return newO;
}
function key2Upper(obj) {
let newO = {};
for (var key in obj) {
newO[key.toUpperCase()] = obj[key];
}
return newO;
}
三、新的特性
在ES8中有一个新的方法Object.entries:将一个对象转换为格式为 [ [key1,value1],[key2,value2] ] 的二维数组。
在ES10中出现了一个与之对应的方法Object.fromEntries:即将一个二维数组转换为对象。
在这两个方法的互相配合下就有了新的解决方案(注:这种方案的性能远差于直接操作源对象,此处只是展示一种使用场景):
// 转换小写
function key2Lower(obj) {
if (!obj) {
return obj;
}
const array_2D_obj = Object.entries(obj).map(x => [x[0].toLowerCase(), x[1]]);
return Object.fromEntries(array_2D_obj);
}
// 转换大写
function key2Upper(obj) {
if (!obj) {
return obj;
}
const array_2D_obj = Object.entries(obj).map(x => [x[0].toUpperCase(), x[1]]);
return Object.fromEntries(array_2D_obj);
}