基于JavaScript判断两个对象内容是否相等


Posted in Javascript onJanuary 10, 2020

这篇文章主要介绍了基于JavaScript判断两个对象内容是否相等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

ES6中有一个方法判断两个对象是否相等,这个方法判断是两个对象引用地址是否一致

let obj1= {
  a: 1
 }
 let obj2 = {
  a: 1
 }
console.log(Object.is(obj1, obj2)) // false

let obj3 = obj1
console.log(Object.is(obj1, obj3)) // trueconsole.log(Object.is(obj2, obj3)) // false

当需求是比较两个对象内容是否一致时就没用了。

想要比较两个对象内容是否一致,思路是要遍历对象的所有键名和键值是否都一致:

1、判断两个对象是否指向同一内存

2、使用Object.getOwnPropertyNames获取对象所有键名数组

3、判断两个对象的键名数组是否相等

4、遍历键名,判断键值是否都相等

let obj1 = {
  a: 1,
  b: {
   c: 2
  }
 }
 let obj2 = {
  b: {
   c: 3
  },
  a: 1
 }
 function isObjectValueEqual(a, b) {
  // 判断两个对象是否指向同一内存,指向同一内存返回true
  if (a === b) return true
  // 获取两个对象键值数组
  let aProps = Object.getOwnPropertyNames(a)
  let bProps = Object.getOwnPropertyNames(b)
  // 判断两个对象键值数组长度是否一致,不一致返回false
  if (aProps.length !== bProps.length) return false
  // 遍历对象的键值
  for (let prop in a) {
   // 判断a的键值,在b中是否存在,不存在,返回false
   if (b.hasOwnProperty(prop)) {
    // 判断a的键值是否为对象,是则递归,不是对象直接判断键值是否相等,不相等返回false
    if (typeof a[prop] === 'object') {
     if (!isObjectValueEqual(a[prop], b[prop])) return false
    } else if (a[prop] !== b[prop]) {
     return false
    }
   } else {
    return false
   }
  }
  return true
 }
 console.log(isObjectValueEqual(obj1, obj2)) // false

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用jQuery简化JavaScript开发分析
Feb 19 Javascript
jQuery live( type, fn ) 委派事件实现
Oct 11 Javascript
jquery 学习之二 属性(类)
Nov 25 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
AngularJS监听路由变化的方法
Mar 07 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 25 Javascript
vue-cli设置css不生效的解决方法
Feb 07 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
jQuery操作事件完整实例分析
Jan 10 #jQuery
jQuery操作元素追加内容示例
Jan 10 #jQuery
基于JS判断对象是否是数组
Jan 10 #Javascript
JS数组属性去重并校验重复数据
Jan 10 #Javascript
JS图片懒加载的优点及实现原理
Jan 10 #Javascript
jQuery操作元素的内容和样式完整实例分析
Jan 10 #jQuery
jquery选择器和属性对象的操作实例分析
Jan 10 #jQuery
You might like
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
浅析PHP文件下载原理
2014/12/25 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
python开发之函数定义实例分析
2015/11/12 Python
python实现k-means聚类算法
2018/02/23 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
pytorch 数据集图片显示方法
2018/07/26 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
说出一些常用的类,包,接口
2014/09/22 面试题
专业实习自我鉴定
2013/10/29 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL