通过JS深度判断两个对象字段相同


Posted in Javascript onJune 14, 2019

代码:

/**
* 判断此对象是否是Object类型
* @param {Object} obj 
*/
function isObject(obj){
return Object.prototype.toString.call(obj)==='[object Object]';
};
/**
* 判断此类型是否是Array类型
* @param {Array} arr 
*/
function isArray(arr){
return Object.prototype.toString.call(arr)==='[object Array]';
};
/**
* 深度比较两个对象是否相同
* @param {Object} oldData 
* @param {Object} newData 
*/
function equalsObj(oldData,newData){
// 类型为基本类型时,如果相同,则返回true
if(oldData===newData)return true;
if(isObject(oldData)&&isObject(newData)&&Object.keys(oldData).length === Object.keys(newData).length){
// 类型为对象并且元素个数相同
// 遍历所有对象中所有属性,判断元素是否相同
for (const key in oldData) {
if (oldData.hasOwnProperty(key)) {
if(!equalsObj(oldData[key],newData[key]))
// 对象中具有不相同属性 返回false
return false;
}
}
}else if(isArray(oldData)&&isArray(oldData)&&oldData.length===newData.length){
// 类型为数组并且数组长度相同
for (let i = 0,length=oldData.length; i <length; i++) {
if(!equalsObj(oldData[i],newData[i]))
// 如果数组元素中具有不相同元素,返回false
return false;
}
}else{
// 其它类型,均返回false
return false;
}
// 走到这里,说明数组或者对象中所有元素都相同,返回true
return true;
};

测试:

var oldArr = [1,2,
[
{
name:"张三",
age:11,
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
var newArr = [1,2,
[
{
name:"张三",
age:11
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
console.log(equalsObj(oldArr,newArr));

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
javascript打印输出json实例
Nov 11 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
JS中间件设计模式的深入探讨与实例分析
Apr 11 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 Javascript
如何利用node转发请求详解
Sep 17 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 #Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 #Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 #Javascript
Vue动态创建注册component的实例代码
Jun 14 #Javascript
基于Proxy的小程序状态管理实现
Jun 14 #Javascript
深度了解vue.js中hooks的相关知识
Jun 14 #Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 #Javascript
You might like
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
Javascript注入技巧
2007/06/22 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
python3中int(整型)的使用教程
2017/03/23 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
Django实现发送邮件功能
2019/07/18 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
Internal修饰符有什么含义
2013/07/10 面试题
影视动画专业个人的自我评价
2013/12/31 职场文书
个人评价范文分享
2014/01/11 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
主持人开场白台词
2015/05/29 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
js中Object.create实例用法详解
2021/10/05 Javascript