【面试被问了2次】

先定义3个方法

判断是否是object

判断是否是数据

判断长度

function isObj(object) {
    return object && typeof(object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
}

function isArray(object) {
    return object && typeof(object) == 'object' && object.constructor == Array;
}

function getLength(object) {
    var count = 0;
    for(var i in object) count++;
    return count;
}

var jsonObjA = {
    "Name": "MyName",
    "Company": "MyCompany",
    "Infos": [{
            "Age": "100"
        },
        {
            "Box": [{
                    "Height": "100"
                },
                {
                    "Weight": "200"
                }
            ]
        }
    ],
    "Address": "马栏山"
}
var jsonObjB = {
    "Name": "MyName",
    "Company": "MyCompany",
    "Infos": [{
            "Age": "100"
        },
        {
            "Box": [{
                    "Height": "100"
                },
                {
                    "Weight": "200"
                }
            ]
        }
    ],
    "Address": "马栏山二号"
}

function Compare(objA, objB) {
    if(!isObj(objA) || !isObj(objB)) return false; //判断类型是否正确
    if(getLength(objA) != getLength(objB)) return false; //判断长度是否一致
    return CompareObj(objA, objB, true); //默认为true
}

function CompareObj(objA, objB, flag) {
    for(var key in objA) {
        if(!flag) //跳出整个循环
            break;
        if(!objB.hasOwnProperty(key)) {
            flag = false;
            break;
        }
        if(!isArray(objA[key])) { //子级不是数组时,比较属性值
            if(objB[key] != objA[key]) {
                flag = false;
                break;
            }
        } else {
            if(!isArray(objB[key])) {
                flag = false;
                break;
            }
            var oA = objA[key],
                oB = objB[key];
            if(oA.length != oB.length) {
                flag = false;
                break;
            }
            for(var k in oA) {
                if(!flag) //这里跳出循环是为了不让递归继续
                    break;
                flag = CompareObj(oA[k], oB[k], flag);
            }
        }
    }
    return flag;
}

var result = Compare(jsonObjA, jsonObjB);
console.log(result); // true or false

转载于:https://my.oschina.net/u/3057758/blog/1541367

如何比较两个json相关推荐

  1. java json 去重_js操作两个json数组合并、去重,以及删除某一项元素

    两个json数组合并去重,以及删除某一项元素 let ha = [ {id:'H',name:'3'}, {id:'A',name:'6'}, {id:'B',name:'14'}, {id:'C', ...

  2. JS:两个json数组合并、去重,以及删除某一项元素

    两个json数组合并去重,以及删除某一项元素 let ha = [{id:'H',name:'3'},{id:'A',name:'6'},{id:'B',name:'14'},{id:'C',name ...

  3. python怎么验证两个json是不是一样_比较Python中的两个JSON树

    我有这种JSON树的文件夹结构.有什么方法可以将它与同类的Json树进行比较以获得差异(文件丢失或不同的文件属性(日期,crc,..)),并将其作为具有不同/缺失文件名称的列表返回.比较Python中 ...

  4. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

    本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...

  5. python快速比较两个json_Python 比较两个json的方法

    在测试过程中经常会对比两个json的异同,如果当json串较长时,一个一个的对比显然是很浪费时间的. 所以写一个比较json异同的测试方法是很有必要的. 下面介绍一下比较json异同的两种方法,以及测 ...

  6. JavaScript 怎么合并两个JSON,并覆盖重复键

    如何合并两个JSON,并覆盖重复键 xxx={a:{a1:"a1"},b:{b1:{b11:1,b12:2}}}; yyy={b:{b1:{b11:4,b12:5}}}; 把 xx ...

  7. 比较两给json是否一致

    比较两给json是否一致 直接上代码 直接上代码 package com.test.core.utils;import com.google.gson.Gson; import com.google. ...

  8. js比较两个JSON对象,返回变化值

    废话不多说,直接上干货. let utils = {/*** 比较两个json(新json与老json)的不同,并返回 不同时的旧值(old_val)和新值(new_val)* @param {*} ...

  9. python校验两个json体

    问题: 有两个json体,可是,需要验证json之间的内容有什么差异,然后,就想写一个json,尝试 桌面创建一个python文件,和创建的python文件项目目录下创建 json1.txt json ...

  10. es6如何修改json数组里的某个值_如何通过id使用纯Javascript(ES6)合并两个json对象值...

    我有两个Javascript对象数组,并且想要将具有相同"ObjID"的两个Javascript对象的属性合并为一个Javascript对象.如何通过id使用纯Javascript ...

最新文章

  1. mac80211解析之发送速率控制
  2. python 单元测试_Python系列之单元测试框架【unittest】
  3. oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
  4. oracle 优化分组 sql语句,Oracle SQL语句之常见优化方法 五
  5. 少儿编程100讲轻松学python(十一)-python如何保留小数点位数
  6. 手机还是不要随便更新的好
  7. 机器学习知识总结系列- 基本概念(1-0)
  8. java基础 泛型类的定义
  9. VMWare Fusion 安装 Centos7操作系统
  10. android中如何取得docx文件,如何显示或读取DOCX文件(how to Show or Read docx file)
  11. BI分析工具软件有哪些
  12. 小程序开发-用户对自己信息的更改
  13. ez4w.com的5折优惠码
  14. Centos下netstat的使用
  15. 【转】Android 自己收集的开源项目和文章集合(持续更新至2018.12.17)
  16. 2017年原生广告程序化购买将成为新趋势
  17. tvs管参数数解读_浅析TVS管的特性及参数
  18. 测开- Junit 单元测试框架
  19. C# winform 基于MYSQL数据库 简单使用动态TreeView
  20. C语言qsort多种用法

热门文章

  1. JavaScript 获取当前时间的前后几天、增加或减少指定天数
  2. 列表中的导航菜单的制作
  3. 七夕情人节表白HTML前端代码
  4. 蓝桥杯 BASIC-3 字母图形 c++实现
  5. MyBatis-Plus分页查询(快速上手运用)
  6. mysql修改视图定义_MySQL修改视图
  7. C++ 哈希表及unordered_set + unordered_map容器
  8. 21级数据结构考前模拟题
  9. 报错:pymysql.err.IntegrityError: (1062, “Duplicate entry ‘1‘ for key ‘mm.PRIMARY‘“)
  10. python绘制正六边形