通过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 相关文章推荐
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
Angular4开发解决跨域问题详解
Aug 28 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
jQuery实现表格隔行换色
Sep 01 jQuery
vue填坑之webpack run build 静态资源找不到的解决方法
Sep 03 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
20个必会的JavaScript面试题(小结)
Jul 02 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
Vue项目开发常见问题和解决方案总结
Sep 11 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给每个段落添加空格的方法
2015/03/20 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
python实现RSA加密(解密)算法
2016/02/17 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Linux下python3.7.0安装教程
2018/07/30 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python 创建一维的0向量实例
2019/12/02 Python
Python常用库大全及简要说明
2020/01/17 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
2014年百日安全生产活动总结
2014/05/04 职场文书
活动总结报告范文
2014/05/04 职场文书
员工安全生产责任书
2014/07/22 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
考研英语复习计划
2015/01/19 职场文书
免职通知
2015/04/23 职场文书
实施意见格式范本
2015/06/05 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL