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


Posted in Javascript onNovember 20, 2013
//比较数组是否相同
  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)  {
     }
Javascript 相关文章推荐
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
Sep 14 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
Jun 06 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
AngularJS中$http服务常用的应用及参数
Aug 22 Javascript
Jquery调用iframe父页面中的元素及方法
Aug 23 Javascript
浅谈JS中String()与 .toString()的区别
Oct 20 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 #Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 #Javascript
jQuery对html元素取值与赋值的方法
Nov 20 #Javascript
客户端js判断文件类型和文件大小即限制上传大小
Nov 20 #Javascript
JS保留两位小数 四舍五入函数的小例子
Nov 20 #Javascript
使用js简单实现了tree树菜单
Nov 20 #Javascript
js 用CreateElement动态创建标签示例
Nov 20 #Javascript
You might like
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP crc32()函数讲解
2019/02/14 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
Python os模块学习笔记
2015/06/21 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python队列原理及实现方法示例
2019/11/27 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
python中操作文件的模块的方法总结
2021/02/04 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
高中体育教学反思
2014/01/24 职场文书
工程质量月活动方案
2014/02/19 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
风之谷观后感
2015/06/11 职场文书
感谢信的技巧及范例
2019/05/15 职场文书