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 1.0.2
Oct 11 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
JavaScript中的parse()方法使用简介
Jun 12 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
Oct 12 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
JS手写一个自定义Promise操作示例
Mar 16 Javascript
JavaScript实现电灯开关小案例
Mar 30 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 Javascript
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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
javascript中onclick(this)用法介绍
2013/04/19 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Python中pygame安装方法图文详解
2015/11/11 Python
简单谈谈Python流程控制语句
2016/12/04 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
浅谈python之新式类
2018/08/12 Python
python如何实现视频转代码视频
2019/06/17 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
C语言笔试集
2012/07/24 面试题
客服工作职责
2013/12/11 职场文书
军训自我鉴定200字
2014/02/13 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
银行转正自我鉴定
2014/09/29 职场文书
批评与自我批评总结
2014/10/17 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
小学感恩主题班会
2015/08/12 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技