通过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 相关文章推荐
JavaScript Eval 函数使用
Mar 23 Javascript
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
JS排序之快速排序详解
Apr 08 Javascript
基于Vue实现图书管理功能
Oct 17 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
微信小程序开发之tabbar图标和颜色的实现
Oct 17 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
JavaScript代码实现简单计算器
Dec 27 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和ACCESS写聊天室(七)
2006/10/09 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
PHP中PDO的错误处理
2011/09/04 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python插入数据到列表的方法
2015/04/30 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
《世界多美呀》教学反思
2014/03/02 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
雾霾停课通知
2015/04/24 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
python实现A*寻路算法
2021/06/13 Python