Maison > interface Web > js tutoriel > Comment puis-je aplatir et déaplatir efficacement des objets JavaScript ?

Comment puis-je aplatir et déaplatir efficacement des objets JavaScript ?

Linda Hamilton
Libérer: 2024-12-19 00:35:10
original
186 Les gens l'ont consulté

How Can I Efficiently Flatten and Unflatten JavaScript Objects?

Aplatissement et déaplatissement rapides et efficaces des objets JavaScript

Aplatissement et déaplatissement des objets JavaScript imbriqués est une tâche courante dans le développement Web, mais elle peut être gourmand en calcul. Cet article explore des implémentations efficaces pour les opérations d'aplatissement et de déaplatissement.

Aplatissement d'objets

Le code suivant fournit une implémentation d'aplatissement hautement optimisée :

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;
}
Copier après la connexion

Objets non aplatis

Pour lors de l'aplatissement, l'implémentation suivante démontre des performances améliorées :

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;
};
Copier après la connexion

Résultats de référence

Ces implémentations améliorent considérablement les performances dans les opérations d'aplatissement et d'aplatissement. Dans Opera 12.16, l'aplatissement est environ deux fois plus rapide (~ 900 ms au lieu de ~ 1 900 ms), tandis que dans Chrome 29, il s'améliore à peu près au même rythme (~ 800 ms au lieu de ~ 1 600 ms).

Attention :

A noter que ces implémentations, axées sur la rapidité, sont sensibles à la pollution des prototypes. Il est donc essentiel d’éviter de les utiliser sur des objets non fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal