json对象循环遍历

来源:互联网 发布:snmp监控linux 编辑:程序博客网 时间:2024/06/06 02:53

测试的json对象:

var testJson={            "errno": 0,            "errmsg": "成功",            "data": {                "config_list": {                    "reg_conf": {                        "s":{                            "ss":'ss',                            "m":{                                "mm":'mm',                                "j":{                                    "leng":'22',                                    "sf":{                                        "gf":'ss'                                    }                                }                            }                        }                    }                }            }        }

需要将json对象变为同一级:
方法一:
循环递归

const formatFromServer=(data,formatData={})=>{    for(item in data){        if(isJsonObject(data[item])){            formatFromServer(data[item],formatData);        }else{            formatData[item]=data[item];        }    }    return formatData;}console.time("循环");formatFromServer(testJson);console.timeEnd("循环");

方法二:(类似java中文件夹遍历)

const formatFromServer=(data,formatData={})=>{    let ma=[];    for(item in data){        if(isJsonObject(data[item])){            ma.push(data[item]);        }else{            formatData[item]=data[item];        }    }    for(let i=0;i<ma.length;i++){        for(item in ma[i]){            if(isJsonObject(ma[i][item])){                ma.push(ma[i][item]);            }else{                formatData[item]=ma[i][item];            }        }    }    return formatData;}console.time("循环");formatFromServer(testJson);console.timeEnd("循环");

经过测试,两个运行时间:
 递归:0.55左右
 遍历:0.66左右
为什么递归的时间反而比较少?
 因为在文件夹遍历中是不停地取数组的长度,这个花费时间比较长,相当于多遍历一次数组,时间复杂度变成了O(n^2).

原创粉丝点击