Heim >Web-Frontend >js-Tutorial >Wie kann ich JavaScript-Objekte effizient reduzieren bzw. ihre Reduzierung aufheben?
Schnelles und effizientes Flattening und Unflattening von JavaScript-Objekten
Das Flattening und Unflattening verschachtelter JavaScript-Objekte ist eine häufige Aufgabe in der Webentwicklung, aber es ist möglich rechenintensiv sein. In diesem Artikel werden effiziente Implementierungen sowohl für Flattening- als auch für Unflattening-Vorgänge untersucht.
Objekte reduzieren
Der folgende Code bietet eine hochoptimierte Flattening-Implementierung:
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 ? prop+"."+i : 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; }
Objekte abflachen
Für Beim Aufheben der Glättung zeigt die folgende Implementierung eine verbesserte Leistung:
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; };
Benchmark-Ergebnisse
Diese Implementierungen verbessern die Leistung bei Glättungs- und Unglättungsvorgängen erheblich. In Opera 12.16 ist die Reduzierung etwa doppelt so schnell (~900 ms statt ~1900 ms), während sie sich in Chrome 29 um etwa die gleiche Geschwindigkeit verbessert (~800 ms statt ~1600 ms).
Vorsicht :
Beachten Sie, dass diese auf Geschwindigkeit ausgerichteten Implementierungen anfällig sind zur prototypischen Verschmutzung. Daher ist es wichtig, sie nicht auf nicht vertrauenswürdigen Objekten zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kann ich JavaScript-Objekte effizient reduzieren bzw. ihre Reduzierung aufheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!