通过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节点知识
Jan 31 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
Jan 13 Javascript
html5+javascript制作简易画板附图
Apr 25 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
实现单层json按照key字母顺序排序的示例
Dec 06 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
Angular通过指令动态添加组件问题
Jul 09 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
JavaScript实现打砖块游戏
Feb 25 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP 定界符 使用技巧
2009/06/14 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
详解微信第三方小程序代开发
2017/06/23 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
通过python顺序修改文件名字的方法
2018/07/11 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python-opencv颜色提取分割方法
2018/12/08 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python config文件的读写操作示例
2019/09/27 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python实现126邮箱发送邮件
2020/05/20 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
项目经理岗位职责
2015/01/31 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书