Was ist der effizienteste Weg, alle Schlüssel eines Objekts in Kleinbuchstaben umzuwandeln?
P粉066224086
P粉066224086 2023-08-22 12:42:40
0
2
570
<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>

P粉066224086
P粉066224086

Antworte allen(2)
P粉792026467

使用 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粉258788831

我想到的最快的方法是创建一个新对象:

var key, keys = Object.keys(obj);
var n = keys.length;
var newobj={}
while (n--) {
  key = keys[n];
  newobj[key.toLowerCase()] = obj[key];
}

我对v8的当前内部工作机制不够熟悉,无法给出明确的答案。几年前,我看过一个视频,开发人员在其中讨论了对象,如果我没记错的话,它只会删除引用,并让垃圾收集器处理。但那是几年前的事了,所以即使当时是这样,现在也不一定是这样。

它会在以后给你带来麻烦吗?这取决于你在做什么,但可能不会。创建短暂对象是非常常见的,所以代码被优化来处理它。但每个环境都有其限制,也许它会给你带来麻烦。你必须使用实际数据进行测试。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage