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

扁平化非扁平化嵌套JSON对象的最快方法,第1张

扁平化/非扁平化嵌套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)。

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存