快速且有效率地扁平化與取消扁平化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 && 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中文網其他相關文章!