首頁 > web前端 > js教程 > 如何優化扁平化和取消扁平化嵌套 JavaScript 物件?

如何優化扁平化和取消扁平化嵌套 JavaScript 物件?

Linda Hamilton
發布: 2024-12-29 08:30:11
原創
856 人瀏覽過

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;
};
登入後複製

這些最佳化🎜>這些最佳化顯著提高了展平和反展平嵌套的效能J​​avaScript 對象,同時遵守瀏覽器相容性要求。

以上是如何優化扁平化和取消扁平化嵌套 JavaScript 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板