基于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 相关文章推荐
Extjs中ComboBox加载并赋初值的实现方法
Mar 22 Javascript
ExtJS判断IE浏览器类型的方法
Feb 10 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
简介JavaScript中getUTCMonth()方法的使用
Jun 10 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
通过一个简单的例子学会vuex与模块化
Nov 22 Javascript
利用JS实现一个同Excel表现的智能填充算法
Aug 13 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 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
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
JS作用域链详解
2017/06/26 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python中的迭代器漫谈
2015/02/03 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
2014年网络管理员工作总结
2014/12/01 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
青年教师听课心得体会
2016/01/15 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL
Django框架模板用法详解
2022/06/10 Python