JS中如何比较两个Json对象是否相等实例代码
在js前端面试过程中,经常会遇到这样的笔试题:JS中如何比较两个Json对象是否相等实例代码,下面小编抽点时间给大家整理下,一起看看吧。
1.先准备三个工具方法,用于判断是否是对象类型,是否是数组,获取对象长度
functionisObj(object){
returnobject&&typeof(object)=='object'&&Object.prototype.toString.call(object).toLowerCase()=="[objectobject]";
}
functionisArray(object){
returnobject&&typeof(object)=='object'&&object.constructor==Array;
}
functiongetLength(object){
varcount=0;
for(variinobject)count++;
returncount;
}
2.准备两个相同或不同的Json对象
varjsonObjA={
"Name":"MyName",
"Company":"MyCompany",
"Infos":[
{"Age":"100"},
{
"Box":[
{"Height":"100"},
{"Weight":"200"}
]
}
],
"Address":"马栏山"
}
varjsonObjB={
"Name":"MyName",
"Company":"MyCompany",
"Infos":[
{"Age":"100"},
{
"Box":[
{"Height":"100"},
{"Weight":"200"}
]
}
],
"Address":"马栏山二号"
}
3.主要的代码
functionCompare(objA,objB){
if(!isObj(objA)||!isObj(objB))returnfalse;//判断类型是否正确
if(getLength(objA)!=getLength(objB))returnfalse;//判断长度是否一致
returnCompareObj(objA,objB,true);//默认为true
}
functionCompareObj(objA,objB,flag){
for(varkeyinobjA){
if(!flag)//跳出整个循环
break;
if(!objB.hasOwnProperty(key)){flag=false;break;}
if(!isArray(objA[key])){//子级不是数组时,比较属性值
if(objB[key]!=objA[key]){flag=false;break;}
}else{
if(!isArray(objB[key])){flag=false;break;}
varoA=objA[key],oB=objB[key];
if(oA.length!=oB.length){flag=false;break;}
for(varkinoA){
if(!flag)//这里跳出循环是为了不让递归继续
break;
flag=CompareObj(oA[k],oB[k],flag);
}
}
}
returnflag;
}
4.调用方法
varresult=Compare(jsonObjA,jsonObjB); console.log(result);//trueorfalse