展平與展平巢狀 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中文網其他相關文章!