JS中如何比较两个Json对象是否相等实例代码


Posted in Javascript onJuly 13, 2016

在js前端面试过程中,经常会遇到这样的笔试题:JS中如何比较两个Json对象是否相等实例代码,下面小编抽点时间给大家整理下,一起看看吧。

1.先准备三个工具方法,用于判断是否是对象类型,是否是数组,获取对象长度

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;
}

2.准备两个相同或不同的Json对象

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": "马栏山二号"
}

3.主要的代码

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;
}

4.调用方法

var result = Compare(jsonObjA, jsonObjB);
console.log(result); // true or false
Javascript 相关文章推荐
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
jquery实现submit提交表单
Feb 03 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
JS图片定时翻滚效果实现方法
Jun 21 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
JS实现队列的先进先出功能示例
May 10 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
js实现可键盘控制的简单抽奖程序
Jul 13 #Javascript
原生js仿jquery animate动画效果
Jul 13 #Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 #Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 #Javascript
Javascript类型系统之undefined和null浅析
Jul 13 #Javascript
JS基础随笔(菜鸟必看篇)
Jul 13 #Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 #Javascript
You might like
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
php-msf源码详解
2017/12/25 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
js实现轮播图特效
2020/05/28 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
python中List的sort方法指南
2014/09/01 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
使用python实现生成用户信息
2017/03/20 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
python excel转换csv代码实例
2019/08/26 Python
python logging 日志的级别调整方式
2020/02/21 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
学校教师安全责任书
2014/07/23 职场文书
民族学专业求职信
2014/07/28 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
安全教育片观后感
2015/06/17 职场文书
初中班干部工作总结
2015/08/10 职场文书
信息技术教研组工作总结
2015/08/13 职场文书