详解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 相关文章推荐
用原生JavaScript实现jQuery的$.getJSON的解决方法
May 03 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
前端轻量级MVC框架CanJS详解
Sep 26 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
关于JS变量和作用域详解
Jul 28 Javascript
AngularJS自定义指令之复制指令实现方法
May 18 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
JavaScript Array对象使用方法解析
Sep 24 Javascript
js代码实现轮播图
May 04 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+Ajax+JS实现多图上传
2016/05/07 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python装饰器常见使用方法分析
2019/06/26 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
Python读取csv文件实例解析
2019/12/30 Python
python实现电子词典
2020/03/03 Python
婚礼司仪主持词
2014/03/14 职场文书
贷款担保申请书
2014/05/20 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
求职自我推荐信
2015/03/24 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
Java Redisson多策略注解限流
2022/09/23 Java/Android