详解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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
JavaScript利用闭包实现模块化
Jan 13 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 Javascript
详解vue中移动端自适应方案
May 05 Javascript
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 jQuery
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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
深入解析Python中的集合类型操作符
2015/08/19 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python字典的核心底层原理讲解
2019/01/24 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
怎么写好自荐信
2013/10/30 职场文书
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
学校安全教育制度
2014/01/31 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
小学六年级毕业感言
2015/07/30 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
MySQL GTID复制的具体使用
2022/05/20 MySQL
使用Redis实现分布式锁的方法
2022/06/16 Redis