展平和展平嵌套 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中文网其他相关文章!