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