Heim >Web-Frontend >js-Tutorial >Wie kann ich JavaScript-Objekte effizient reduzieren bzw. ihre Reduzierung aufheben?

Wie kann ich JavaScript-Objekte effizient reduzieren bzw. ihre Reduzierung aufheben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-19 00:35:10175Durchsuche

How Can I Efficiently Flatten and Unflatten JavaScript Objects?

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

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