ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript オブジェクトを効率的にフラット化および非フラット化するにはどうすればよいですか?

JavaScript オブジェクトを効率的にフラット化および非フラット化するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-19 00:35:10
オリジナル
201 人が閲覧しました

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 では、フラット化は約 2 倍の速さ (~1900 ミリ秒ではなく ~900 ミリ秒) ですが、Chrome 29 では、ほぼ同じ速度 (~1600 ミリ秒ではなく~800 ミリ秒) で改善されています。

注意:

これらの実装は速度を重視しているため、プロトタイプ汚染の影響を受けやすいことに注意してください。したがって、信頼できないオブジェクトに対してそれらを使用しないようにすることが重要です。

以上がJavaScript オブジェクトを効率的にフラット化および非フラット化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート