P粉7920264672023-08-23 10:44:49
Object.fromEntries
(ES10)使用新的Object.fromEntries
方法的本地和不可变解决方案:
const newObj = Object.fromEntries( Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v]) );
在该函数广泛可用之前,您可以使用以下polyfill自定义定义:
Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));
一个好处是,此方法与Object.entries
相反,因此现在您可以在对象和数组表示之间来回切换。
P粉2587888312023-08-23 00:25:13
我想到的最快的方法是创建一个新对象:
var key, keys = Object.keys(obj); var n = keys.length; var newobj={} while (n--) { key = keys[n]; newobj[key.toLowerCase()] = obj[key]; }
我对v8的当前内部工作机制不够熟悉,无法给出明确的答案。几年前,我看过一个视频,开发人员在其中讨论了对象,如果我没记错的话,它只会删除引用,并让垃圾收集器处理。但那是几年前的事了,所以即使当时是这样,现在也不一定是这样。
它会在以后给你带来麻烦吗?这取决于你在做什么,但可能不会。创建短暂对象是非常常见的,所以代码被优化来处理它。但每个环境都有其限制,也许它会给你带来麻烦。你必须使用实际数据进行测试。