通过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 相关文章推荐
jQuery-ui中自动完成实现方法
Jun 10 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
javascript自动给文本url地址增加链接的方法分享
Jan 20 Javascript
js取得html iframe中的元素和变量值
Jun 30 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
JavaScript实现左右下拉框动态增删示例
Mar 09 Javascript
JS中的三个循环小结
Jun 20 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
浅谈sass在vue注意的地方
Aug 10 Javascript
Angular 容器部署的方法
Apr 17 Javascript
js canvas实现俄罗斯方块
Oct 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
微信小程序form表单组件示例代码
2018/07/15 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
python批量提交沙箱问题实例
2014/10/08 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
详解【python】str与json类型转换
2019/04/29 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
文明礼仪主题班会
2015/08/13 职场文书
微信早安问候语
2015/11/10 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
用Java实现简单计算器功能
2021/07/21 Java/Android