通过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 相关文章推荐
html读出文本文件内容
Jan 22 Javascript
javascript function、指针及内置对象
Feb 19 Javascript
JQuery CSS样式控制 学习笔记
Jul 23 Javascript
MooTools 1.2介绍
Sep 14 Javascript
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
Jquery中dialog属性小记
Sep 03 Javascript
js动态切换图片的方法
Jan 20 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
AngularJS基础 ng-mouseleave 指令详解
Aug 02 Javascript
es6学习之解构时应该注意的点
Aug 29 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
微信小程序手动添加收货地址省市区联动
May 18 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
扩展String功能方法
2006/09/22 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
获取Django项目的全部url方法详解
2017/10/26 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python面试题之列表声明实例分析
2019/07/08 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
线程同步的方法
2016/11/23 面试题
行政管理人员精品工作推荐信
2013/11/04 职场文书
大学生简单自荐信
2013/11/10 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
教师岗位职责范本
2015/04/02 职场文书
催款函范文
2015/06/24 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
MySQL 数据类型详情
2021/11/11 MySQL