详解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 字符串与数组转换函数[不用split与join]
Dec 13 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
Jun 03 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
基于Javascript倒计时效果
Dec 22 Javascript
React Native使用百度Echarts显示图表的示例代码
Nov 07 Javascript
vue实现简单的星级评分组件源码
Nov 16 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
react+antd 递归实现树状目录操作
Nov 02 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实现的带超时功能get_headers函数
2015/02/10 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
详解Python中的路径问题
2020/09/02 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
黄河象教学反思
2014/02/10 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
新员工入职欢迎词
2015/01/23 职场文书