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