我想出了一个
function keysToLowerCase (obj) {
var keys = Object.keys(obj);
var n = keys.length;
while (n--) {
var key = keys[n]; // "cache" it, for less lookups to the array
if (key !== key.toLowerCase()) { // might already be in its lower case version
obj[key.toLowerCase()] = obj[key] // swap the value to a new lower case key
delete obj[key] // delete the old key
}
}
return (obj);
}
不过我不确定 v8 的行为,例如它是否会真正删除其他键,还是只会删除引用,导致垃圾收集器最终会给我带来麻烦?
另外,我创建了这些测试,希望您能在那里添加您的答案,以便我们可以看到它们的匹配情况。
编辑1: 根据测试结果,如果不检查键名是否已经转换成小写,速度会更快,但除了速度更快之外,忽略这一步骤并创建新的小写键名是否会导致更多混乱?垃圾回收器是否会满意?
key.toLowerCase()
被调用了两次,你可以将其存储在一个变量中,并在下一行中使用它。而且创建一个新对象,只是添加新键比:添加新键到原始对象+删除先前的键更慢,这很奇怪? - S.Serpooshan