首页 >web前端 >js教程 >如何有效地展平和取消展平 JavaScript 对象?

如何有效地展平和取消展平 JavaScript 对象?

Linda Hamilton
Linda Hamilton原创
2024-12-19 00:35:10210浏览

How Can I Efficiently Flatten and Unflatten JavaScript Objects?

快速高效地扁平化和取消扁平化 JavaScript 对象

扁平化和取消扁平化嵌套 JavaScript 对象是 Web 开发中的一项常见任务,但它可以是计算密集型的。本文探讨了展平和反展平操作的高效实现。

展平对象

以下代码提供了高度优化的展平实现:

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;
}

不平整对象

对于反扁平化,以下实现展示了改进的性能:

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;
};

基准结果

这些实现显着提高了扁平化性能和展平操作。在 Opera 12.16 中,扁平化速度大约是原来的两倍(约 900 毫秒,而不是约 1900 毫秒),而在 Chrome 29 中,它的改进速度大致相同(约 800 毫秒,而不是约 1600 毫秒)。

注意:

请注意,这些专注于速度的实现很容易受到原型的影响 污染。因此,避免在不受信任的对象上使用它们非常重要。

以上是如何有效地展平和取消展平 JavaScript 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn