Heim >Web-Frontend >js-Tutorial >Wie kann ich das Reduzieren und Aufheben der Reduziertheit verschachtelter JavaScript-Objekte optimieren?
Unflattening und Unflattening Nested JavaScript Objects: Optimierte Implementierungen
Das Reduzieren und Unflattening komplexer JavaScript-Objekte kann zeitaufwändig sein. Hier ist eine umfassende Analyse zur Optimierung dieses Vorgangs:
Die Herausforderung: Ein JavaScript-Objekt muss mit „.“ abgeflacht werden. als Trennzeichen für Objektschlüssel und „[INDEX]“ für Arrays.
Erste Lösung:Der bereitgestellte Code löst das Problem, ist aber relativ langsam.
Schnellere Implementierung (mit regulären Ausdrücken): Bergi führt eine deutlich schnellere Implementierung mit regulären Ausdrücken ein. Es entglättet das Objekt, indem es die reduzierten Eigenschaften durchläuft und entsprechend verschachtelte Strukturen erstellt.
Schnellste Implementierung (nicht-regex): Aufbauend auf Bergis Konzept bietet die bereitgestellte Implementierung die schnellste nicht-regex Version. Es setzt spezifische Regeln für Schlüsselnamen voraus, ausgenommen Ganzzahlen am Anfang oder Punkte innerhalb des Namens.
Verbesserung der Unflattening-Leistung: AaditMShah verbessert die Unflattening-Leistung durch den Einsatz von Inline-Pfadanalyse anstelle von String.split in der verschachtelten Schleife.
Endgültiger Code (unflatten):
Object.unflatten = function(data) { "use strict"; if (Object(data) !== data || Array.isArray(data)) return data; var regex = /\.?([^.\[\]]+)|\[(\d+)\]/g, resultholder = {}; for (var p in data) { var cur = resultholder, prop = "", m; while (m = regex.exec(p)) { cur = cur[prop] || (cur[prop] = (m[2] ? [] : {})); prop = m[2] || m[1]; } cur[prop] = data[p]; } return resultholder[""] || resultholder; };
Endgültiger Code (flatten):
Object.flatten = function(data) { var result = {}; function recurse (cur, prop) { if (Object(cur) !== cur) { result[prop] = cur; } else if (Array.isArray(cur)) { for(var i=0, l=cur.length; i<l; i++) recurse(cur[i], prop + "[" + i + "]"); if (l == 0) result[prop] = []; } else { var isEmpty = true; for (var p in cur) { isEmpty = false; recurse(cur[p], prop ? prop+"."+p : p); } if (isEmpty && prop) result[prop] = {}; } } recurse(data, ""); return result; };
Diese Optimierungen verbessern die Leistung beim Flattening und Unflattening verschachtelt erheblich JavaScript-Objekte unter Einhaltung der Browserkompatibilitätsanforderungen.
Das obige ist der detaillierte Inhalt vonWie kann ich das Reduzieren und Aufheben der Reduziertheit verschachtelter JavaScript-Objekte optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!