通过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 相关文章推荐
accesskey 提交
Jun 26 Javascript
语义化 H1 标签
Jan 14 Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
javascript的动态加载、缓存、更新以及复用(一)
Jun 09 Javascript
js onmousewheel事件多次触发问题解决方法
Oct 17 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
jQuery在线选座位插件seat-charts特效代码分享
Aug 27 Javascript
详解vue.js全局组件和局部组件
Apr 10 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
javascript trie前缀树的示例
Jan 29 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
php mysql 封装类实例代码
2016/09/18 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
js实现网页收藏功能
2015/12/17 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python中文件操作简明介绍
2015/04/13 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
2015大学迎新标语
2015/07/16 职场文书
网吧管理制度范本
2015/08/05 职场文书
初一英语教学反思
2016/02/15 职场文书