详解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 相关文章推荐
js活用事件触发对象动作
Aug 10 Javascript
在父页面调用子页面的JS方法
Sep 29 Javascript
jquery实现textarea 高度自适应
Mar 11 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
webpack v4 从dev到prd的方法
Apr 02 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 jQuery
node.js ws模块搭建websocket服务端的方法示例
Apr 25 Javascript
在Layui中实现开关按钮的效果实例
Sep 29 Javascript
如何在vue中使用jointjs过程解析
May 29 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
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
javascript实现日历效果
2019/06/17 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
初任培训自我鉴定
2013/10/07 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
疾病证明书
2015/06/19 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js