首页 > web前端 > js教程 > 如何优化扁平化和取消扁平化嵌套 JavaScript 对象?

如何优化扁平化和取消扁平化嵌套 JavaScript 对象?

Linda Hamilton
发布: 2024-12-29 08:30:11
原创
849 人浏览过

How Can I Optimize Flattening and Unflattening Nested JavaScript Objects?

展平和展平嵌套 JavaScript 对象:优化实现

展平和反展平复杂 JavaScript 对象的任务可能非常耗时。下面是优化此操作的全面分析:

挑战: JavaScript 对象需要用“.”进行扁平化。作为对象键的分隔符和数组的“[INDEX]”。

初步解决方案:提供的代码解决了问题,但速度相对较慢。

更快的实现(使用正则表达式): Bergi 引入了使用正则表达式的显着更快的实现。它通过迭代展平的属性并相应地创建嵌套结构来展平对象。

最快的实现(非正则表达式):基于 Bergi 的概念,所提供的实现提供了最快的非正则表达式版本。它假定键名称的特定规则,不包括开头的整数或名称中的句点。

提高反扁平化性能: AaditMShah 通过使用内联路径解析而不是 String.split 来增强反扁平化性能在嵌套循环中。

最终代码(展开):

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;
};
登录后复制

最终代码(展开):

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;
};
登录后复制

这些优化显着提高了展平和反展平嵌套的性能JavaScript 对象,同时遵守浏览器兼容性要求。

以上是如何优化扁平化和取消扁平化嵌套 JavaScript 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板