首頁 >web前端 >js教程 >如何有效地展平和取消展平 JavaScript 物件?

如何有效地展平和取消展平 JavaScript 物件?

Linda Hamilton
Linda Hamilton原創
2024-12-19 00:35:10175瀏覽

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