Heim >Web-Frontend >js-Tutorial >Wie kann ich das Reduzieren und Aufheben der Reduziertheit verschachtelter JavaScript-Objekte optimieren?

Wie kann ich das Reduzieren und Aufheben der Reduziertheit verschachtelter JavaScript-Objekte optimieren?

Linda Hamilton
Linda HamiltonOriginal
2024-12-29 08:30:11875Durchsuche

How Can I Optimize Flattening and Unflattening Nested JavaScript Objects?

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 &amp;&amp; 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn