<p>Ich habe die folgende Lösung gefunden</p>
<pre class="brush:php;toolbar:false;">function keysToLowerCase (obj) {
var keys = Object.keys(obj);
var n = schlüssel.länge;
while (n--) {
var key =keys[n]; // „zwischenspeichern“ für weniger Suchvorgänge im Array
if (key !== key.toLowerCase()) { // Kann bereits Kleinbuchstaben sein
obj[key.toLowerCase()] = obj[key] // Tauschen Sie den Wert gegen den neuen Kleinbuchstabenschlüssel aus
delete obj[key] // Alten Schlüssel löschen
}
}
return (obj);
}</pre>
<p>Aber ich bin mir nicht sicher, wie v8 damit umgehen wird, z. B. wird es tatsächlich andere Schlüssel löschen oder wird es nur die Referenz löschen und dann wird mir der Garbage Collector in den Rücken fallen? </p>
<p>Außerdem habe ich diese Tests erstellt und würde mich freuen, wenn Sie Ihre Antworten dort hinzufügen, damit wir sehen können, wie sie übereinstimmen. </p>
Schafft das noch mehr Verwirrung? Wird der Müllsammler damit zufrieden sein? </p>
使用
Object.fromEntries
(ES10)使用新的
Object.fromEntries
方法的本地和不可变解决方案:在该函数广泛可用之前,您可以使用以下polyfill自定义定义:
一个好处是,此方法与
Object.entries
相反,因此现在您可以在对象和数组表示之间来回切换。我想到的最快的方法是创建一个新对象:
我对v8的当前内部工作机制不够熟悉,无法给出明确的答案。几年前,我看过一个视频,开发人员在其中讨论了对象,如果我没记错的话,它只会删除引用,并让垃圾收集器处理。但那是几年前的事了,所以即使当时是这样,现在也不一定是这样。
它会在以后给你带来麻烦吗?这取决于你在做什么,但可能不会。创建短暂对象是非常常见的,所以代码被优化来处理它。但每个环境都有其限制,也许它会给你带来麻烦。你必须使用实际数据进行测试。