ネストされた 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 && prop) result[prop] = {}; } } recurse(data, ""); return result; };
これらの最適化により、ネストされた平坦化および非平坦化のパフォーマンスが大幅に向上します。ブラウザの互換性要件を遵守しながら、JavaScript オブジェクトを使用します。
以上がネストされた JavaScript オブジェクトのフラット化と非フラット化を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。