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 表单取值常用代码
Dec 22 Javascript
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
jquery.post用法关于type设置问题补充
Jan 03 Javascript
探寻Javascript执行效率问题
Nov 12 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
js实现四舍五入完全保留两位小数的方法
Aug 02 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
教你如何编写Vue.js的单元测试的方法
Oct 17 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 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
PHP判断上传文件类型的解决办法
2015/10/20 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
python 循环遍历字典元素的简单方法
2016/09/11 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
django迁移文件migrations的实现
2020/03/31 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
如何利用python读取micaps文件详解
2020/10/18 Python
python selenium 获取接口数据的实现
2020/12/07 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
中药学专业求职信
2014/05/31 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
运动会开幕式致辞
2015/07/29 职场文书
社区服务理念口号
2015/12/25 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis