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 相关文章推荐
理运用命名空间让js不产生冲突避免全局变量的泛滥
Jun 15 Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
Nov 07 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
快速入门Vue
Dec 19 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
layui使用label标签的方法
Sep 14 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
php处理json时中文问题的解决方法
2011/04/12 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
Python模块WSGI使用详解
2018/02/02 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
python障碍式期权定价公式
2019/07/19 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
static关键字的用法
2013/10/07 面试题
金蝶的一道SQL笔试题
2012/12/18 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
物业接待员岗位职责
2015/04/15 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书