详解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实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
jQuery中index()的用法分析
Sep 05 Javascript
JavaScript判断undefined类型的正确方法
Jun 30 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
js实现中文实时时钟
Jan 15 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
jQuery实现动态加载瀑布流
Sep 01 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
php编程每天必学之验证码
2016/03/03 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Python入门_条件控制(详解)
2017/05/16 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
就业自荐书
2013/12/05 职场文书
高中生学习的自我评价
2013/12/14 职场文书
教师个人自我鉴定
2014/02/08 职场文书
企业党员公开承诺书
2014/03/26 职场文书
家长会欢迎标语
2014/06/24 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
2015年父亲节寄语
2015/03/23 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技