通过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开源框架-jQuery使用手册(1)
Mar 10 Javascript
JavaScript 不只是脚本
May 30 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
Jul 29 Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
Mar 18 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
Oct 27 Javascript
js生成随机数方法和实例
Jan 17 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 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函数strip_tags的一个bug浅析
2014/05/22 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
Python实现的彩票机选器实例
2015/06/17 Python
python通过socket查询whois的方法
2015/07/18 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python多进程重复加载的解决方式
2019/12/13 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
幼儿如何来做好自我评价
2013/11/05 职场文书
英文求职信写作小建议
2014/02/16 职场文书
广播体操口号
2014/06/18 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
禁毒主题班会教案
2015/08/14 职场文书
Python 如何实现文件自动去重
2021/06/02 Python