详解JS 比较两个Json对象的值是否相等的实例_javascript技巧

复制代码 代码如下:

//比较数组是否相同
  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)  {

     }

时间: 2024-10-30 11:49:23

详解JS 比较两个Json对象的值是否相等的实例_javascript技巧的相关文章

Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)_javascript技巧

什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 接下来给大家介绍vuejs单向绑定.双向绑定.列表渲染.响应函数基础知识,具体详情如下所示: (一)单向绑定 <div id="app"> {{ message }} </div> <sc

js实现目录链接,内容跟着目录滚动显示的简单实例_javascript技巧

如下所示: <script> require(["jquery", "bootstrap"], function($) { $(function() { $('.left').height(($('body').height() > $(window).height()) ? $('body').height() : $(window).height()); }); var goTo = $(".con"); var guide

js判断登陆用户名及密码是否为空的简单实例_javascript技巧

js判断登陆用户名及密码是否为空的简单实例 <script type="text/javascript"> // 验证输入不为空的脚本代码 function checkForm(form) { if(form.username.value == "") { alert("用户名不能为空!"); form.username.focus(); return false; } if(form.password.value == "

JS实用的带停顿的逐行文本循环滚动效果实例_javascript技巧

如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JS实用的带停顿的逐行文本循环

JS JSON对象转为字符串的简单实现方法_javascript技巧

由于ie6,7不支持JSON.stringify(json),  我们只好自己再写一个函数来替换这个方法. 代码如下: 复制代码 代码如下: function JsonToStr(o) {var arr = [];var fmt = function(s) {if (typeof s == 'object' && s != null) return JsonToStr(s);return /^(string|number)$/.test(typeof s) ? "'"

JSON 对象未定义错误的解决方法_javascript技巧

今天在使用Moodle的时候, 突然发现在IE下进入课件的时候提示"JSON 未定义"错误信息. 后来找来一个 "json2.js" 引入测试了一下. OK 解决. 后来一向觉的不靠谱,仔细推敲了一下发现我的IE是在兼容模式下. 换到正常模式, 注销到引用"json2.js"的代码. 果然是还是正常的了. 所以, 猜想IE可能是为了兼容模式中的"兼容"功能. 所以不会去加载过多不确定的东西(最小启动单元). 包括JSON的解析

js对象继承之原型链继承实例_javascript技巧

本文实例讲述了js对象继承之原型链继承的用法.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: <script type="text/javascript"> //定义猫的对象 var kitty  = {color:'yellow',bark:function(){alert('喵喵');},climb:function(){alert('我会爬树')}}; //老虎对象的构造函数 function tiger(){  this.color = "ye

JS子父窗口互相操作取值赋值的方法介绍_javascript技巧

$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID"): 取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document); 类似的,取其它窗口的方法大同小异$(se

js判断滚动条是否已到页面最底部或顶部实例_javascript技巧

本文实例讲述了js判断滚动条是否已到页面最底部或顶部的方法.分享给大家供大家参考.具体分析如下: 我们经常会看到很多的网站一个返回顶部效果就是当我们滚动条到指定位置时返回顶部出来了,否则就自动隐藏了,下面就来给大家介绍这种效果实现原理与方法. 当可视区域小于页面的实际高度时,判定为出现滚动条,即: 复制代码 代码如下: if (document.documentElement.clientHeight < document.documentElement.offsetHeight) scroll