JS比较两个JSON对象是否相等的实现方法

作者:拾光时间:2026-10-27 17:56:45浏览:507

本文介绍如何在JavaScript中实现两个JSON对象的深度相等比较。通过递归遍历对象和数组,检查属性数量、类型及具体值是否一致,提供完整的compArray与compObj函数代码及测试用例,帮助开发者解决复杂数据结构的比对需求。

JavaScript对象与数组深度比较实现

代码如下:

// 比较数组是否相同
modeler.compArray=function(array1,array2)
  { 
if((array1&&typeof array1 ==="object"&&array1.constructor===Array)&&(array2&&typeof array2 ==="object"&&array2.constructor===Array))
   {
if(array1.length==array2.length)
      {
for(var i=0;i<array1.length;i++)
       {
var ggg=modeler.compObj(array1[i],array2[i]);
if(!ggg)
        {
return false;
        }
       }
      }
else
      {
return false;
      }
   }
else
   {
throw new Error("argunment is error ;");
   }
return true;
 };
 modeler.compObj=function(obj1,obj2)//比较两个对象是否相等,不包含原形上的属性计较
 {
 if((obj1&&typeof obj1==="object")&&((obj2&&typeof obj2==="object")))
 { 
 var count1=modeler.propertyLength(obj1);
 var count2=modeler.propertyLength(obj2);
 if(count1==count2)
 { 
 for(var ob in obj1)
 {
 if(obj1.hasOwnProperty(ob)&&obj2.hasOwnProperty(ob))
 { 
 if(obj1[ob].constructor==Array&&obj2[ob].constructor==Array)//如果属性是数组
 { 
 if(!modeler.compArray(obj1[ob],array2[ob]))
 {
 return false;
 };
 } 
 else if(typeof obj1[ob]==="string"&&typeof obj2[ob]==="string")//纯属性
 { 
 if(obj1[ob]!==obj2[ob])
 {
 return false;
 }
 }
 else if(typeof obj1[ob]==="object"&&typeof obj2[ob]==="object")//属性是对象
 { 
 if(!modeler.compObj(obj1[ob],obj2[ob]))
 { 
 return false;
 };
 }
 else
 {
 return false;
 }
 } 
 else
 {
 return false;
 }
 }
 }
 else
 {
 return false;
 } 
 }
 return true;
 };
 modeler.propertyLength=function(obj)//获得对象上的属性个数,不包含对象原形上的属性
 { 
 var count=0;
 if(obj&&typeof obj==="object") {
 for(var ooo in obj) {
 if(obj.hasOwnProperty(ooo)) {
 count++;
 }
 }
 return count;
 }else {
 throw new Error("argunment can not be null;");
 }
 };


测试数据:


代码如下:

var data01=[{value:[{id:'asa',value:'dfs'},{}]}];
var data02=[{value:[{id:'asa',value:'dfs'},{}]}];
try {
var jjj=modeler.compArray(data01,data02);
}catch(e) {
     }
作者最新文章