通过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控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
js加强的经典分页实例
Mar 15 Javascript
自己写的Javascript计算时间差函数
Oct 28 Javascript
JS获取select-option-text_value的方法
Dec 26 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
js实现搜索框关键字智能匹配代码
Mar 26 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
正则表达式基础与常用验证表达式
Jun 16 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
Python脚本实时处理log文件的方法
2016/11/21 Python
Python 查看文件的编码格式方法
2017/12/21 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python datetime中strptime用法详解
2019/08/29 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
python代码区分大小写吗
2020/06/17 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
python数据抓取3种方法总结
2021/02/07 Python
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
小学生评语大全
2014/04/18 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
护士求职信范文
2014/05/24 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
社区服务活动感想
2015/08/11 职场文书
教师读书活动心得体会
2016/01/14 职场文书