详解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 相关文章推荐
checkbox 多选框 联动实现代码
Oct 22 Javascript
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
Jul 28 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
了解前端理论:rscss和rsjs
May 23 Javascript
javascript代码实现简易计算器
Jan 25 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
php实现微信支付之现金红包
2018/05/30 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
node.js的事件机制
2017/02/08 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
浅谈js闭包理解
2019/04/01 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python多线程http压力测试脚本
2019/06/25 Python
Django models.py应用实现过程详解
2019/07/29 Python
python字符串下标与切片及使用方法
2020/02/13 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
资产运营委托书范本
2014/10/16 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2014年网管工作总结
2014/12/11 职场文书
2014年底个人工作总结
2015/03/10 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL