json对象循环遍历

时间:2022-08-25 15:21:14

测试的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).