栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

扁平化/非扁平化嵌套JSON对象的最快方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扁平化/非扁平化嵌套JSON对象的最快方法

这是我的简短实现:

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;};

flatten
并没有太大的改变(我不确定您是否真的需要这些
isEmpty
情况):

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;}

他们一起运行您的基准测试大约需要一半的时间(Opera12.16:〜900ms而不是〜1900ms,Chrome29:〜800ms而不是〜1600ms)。

注意:
这里回答的此解决方案和大多数其他解决方案都集中在速度上,并且容易受到原型污染的影响,因此不能在不受信任的对象上使用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号