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 相关文章推荐
javascript 四则运算精度修正函数代码
May 31 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 Javascript
JavaScript 动态加载脚本和样式的方法
Apr 13 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
javascript实现密码验证
Nov 10 Javascript
Vue.js每天必学之内部响应式原理探究
Sep 07 Javascript
从零学习node.js之文件操作(三)
Feb 21 Javascript
Angular中ng-bind和ng-model的区别实例详解
Apr 10 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
node.js环境搭建图文详解
Sep 19 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
vue项目实战总结篇
2018/02/11 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
详解ECMAScript typeof用法
2018/07/25 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
jupyter实现重新加载模块
2020/04/16 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
Java模拟试题
2014/11/10 面试题
四风问题个人剖析材料
2014/10/07 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Python PIL按比例裁剪图片
2022/05/11 Python
Go 内联优化让程序员爱不释手
2022/06/21 Golang