通过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代码
Dec 24 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
javascript实现右下角广告框效果
Feb 01 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 Javascript
详解用函数式编程对JavaScript进行断舍离
Sep 18 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
Nov 12 Javascript
es6中let和const的使用方法详解
Feb 24 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
bootstrap实现tab选项卡切换
Aug 09 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
Python通过poll实现异步IO的方法
2015/06/04 Python
用Python写冒泡排序代码
2016/04/12 Python
Flask之flask-script模块使用
2018/07/26 Python
Python的UTC时间转换讲解
2019/02/26 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
django创建简单的页面响应实例教程
2019/09/06 Python
简单介绍django提供的加密算法
2019/12/18 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
SQL数据库笔试题
2016/03/08 面试题
酒店执行总经理岗位职责
2013/12/15 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
求职自我评价范文100字
2014/09/23 职场文书
郭明义观后感
2015/06/08 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript