基于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 fit布局使用说明
Oct 08 Javascript
jQuery 遍历json数组的实现代码
Sep 22 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
jquery购物车实时结算特效实现思路
Sep 23 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
Oct 18 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
一个极为简单的requirejs实现方法
Oct 20 Javascript
Bootstrap模态框案例解析
Mar 05 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
vue实现的组件兄弟间通信功能示例
Dec 04 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扩展图文教程
2008/12/12 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
获取python文件扩展名和文件名方法
2018/02/02 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python 搜索大文件的实例代码
2019/07/08 Python
python正则-re的用法详解
2019/07/28 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python命令行click参数用法解析
2019/12/19 Python
django model object序列化实例
2020/03/13 Python
Python实现一个论文下载器的过程
2021/01/18 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
光声世纪笔试题目
2012/08/25 面试题
农业大学毕业生的个人自我评价
2013/10/11 职场文书
财务出纳员岗位职责
2013/11/26 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python