通过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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
一段实时更新的时间代码
Jul 07 Javascript
brook javascript框架介绍
Oct 10 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
详解Vue Elememt-UI构建管理后台
Feb 27 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
Oct 22 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
bootstrap实现tab选项卡切换
Aug 09 Javascript
全面解析js中的原型,原型对象,原型链
Jan 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
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
javascript代码实现简易计算器
2021/01/25 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
Python深度优先算法生成迷宫
2018/01/22 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
港湾网络笔试题
2014/04/19 面试题
房展策划方案
2014/06/07 职场文书
授权收款委托书
2014/09/23 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
摩登时代观后感
2015/06/03 职场文书
看上去很美观后感
2015/06/10 职场文书
职工食堂管理制度
2015/08/06 职场文书
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android