详解JS 比较两个Json对象的值是否相等的实例

  

复制代码 代码如下:

  //比较数组是否相同

  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],obj2[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)  {

  }