递归对比对象函数

2023-11-10

在JavaScript中,对象之间的比较通常通过引用进行。当你使用==运算符比较两个对象时,它会检查它们是否引用了同一个内存地址,而不是逐个比较对象的属性。

 

 上图可见,obj1{}是两个不同的对象,尽管它们具有相同的结构(都是空对象)。因此,使用==进行比较将返回false,因为它们并不是同一个内存中的对象。

进行对象递归对比

函数如下

function deepEqual(obj1, obj2) {
  // 检查类型和可枚举属性数量
  if (typeof obj1 !== typeof obj2 || Object.keys(obj1).length !== Object.keys(obj2).length) {
    return false;
  }

  // 逐个比较属性值
  for (var prop in obj1) {
    if (obj1.hasOwnProperty(prop)) {
      if (typeof obj1[prop] === 'object') {
        // 递归比较子对象
        if (!deepEqual(obj1[prop], obj2[prop])) {
          return false;
        }
      } else if (obj1[prop] !== obj2[prop]) {
        return false;
      }
    }
  }

  return true;
}

var obj1 = { name: 'John', age: 30 };
var obj2 = { name: 'John', age: 30 };
var obj3 = { name: 'Jane', age: 25 };

console.log(deepEqual(obj1, obj2)); // 输出 true
console.log(deepEqual(obj1, obj3)); // 输出 false

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归对比对象函数 的相关文章

  • Jquery获取选中的复选框

    您好 我想获取页面中选定复选框的列表 实际上我真正需要的是获取复选框旁边的元素的文本 该元素是一个 html 元素 li 代码如下 但它不起作用 这是我当前的 jQuery document ready function target cl
  • 在 Three.js 中绕点旋转对象的正确方法是什么?

    关于 Three js 的大多数教程 问题都建议使用 Three js 绕点旋转对象的方法是在要旋转的位置创建父对象 附加对象 然后移动子对象 然后 当父级旋转时 子级围绕该点旋转 例如 Make a pivot var pivot new
  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • 西安高新第三中学2021年高考成绩查询,西安高新三中的实力怎么样?让我们来看看这些数据……...

    有家长问 西安高新三中的升学率 到底是多少 可以考上五大又有多少个 先看参加中考的初中部 1 重点班和研讨班55 普通班35 别指望着公办初中的升学率超过60 数据很真实 残酷 2 去年高新三中定向生名额62个 其中高新一中给了5个 铁一中
  • python软件下载3版本-Python 3.7.2和3.6.8版本发布下载,附更新说明

    Python 3 7 2和Python 3 6 8版本发布了 支持Windows Linux UNIX Mac OS平台 已经提供Python 3 7 2 tgz和Python 3 6 8 tgz包下载 说明 Python 3 7 2属于P
  • 如何在右键新建中添加新建xmind文件

    如何在右键新建中添加新建xmind文件 导语 现在总是要写思维导图 所以希望新建的时候更方便快捷一点 不用打开软件新建才能选择新建文件之后文件的位置 于是就开始想能不能想Word文档一样直接鼠标右键新建处就可以有新建Word文档那样 方便的
  • KMP算法-时间复杂度分析

    KMP算法 假设m为模式串strM的长度 n为待匹配的字符串strN的长度 KMP的基本过程 求模式串strM的next数组 遍历比较待匹配的字符串strN 过程 遍历strN 遍历时出现strM j 的回跳 比较strN i strM j
  • 闲聊ROOT权限——ROOT权限的前世今生

    最近工作一直很忙 竟然慢慢地疏远了CSDN的博客 然而在工作中遇到问题 又会被多次的引导至CSDN 故笔者抽空也将自己学习的成果与大家分享在这里 希望能帮助到需要帮助的人 本文将从几个方面 由浅至深地讲述ROOT到底是什么东西 一 ROOT
  • python2.x脚本转换为python3.x脚本方法详细步骤与实践分享

    1 安装python3 x 2 设置python环境变更 将C Python36 Scripts C Python36 追加加到系统变更PATH中 注 C Python36为安装路径 若不一致请更换成你的安装路径 3 找到2to3 py脚本
  • java环境能加快matlab运行吗,花了一天,解决java调用matlab

    鉴于labview做不了web labview强项在于硬件仪器控制 可能也可以做web 还不会 虽然有web发布工具 但是基于远程前面板 最后效果都呈现在前面板上 涉及了跳转页面 matlab绘图等只在服务器端上显示的问题 因此 打算用ja
  • 支付通道简述

    1 苹果内购流程图 官方文档 简体中文文档 Apple Developer 苹果内购没有通知 需要前端调用后端接口 通知后端支付成功 订单号由前端提供 后端通过订单号处理业务逻辑 返回值示例 苹果服务器验证后的返回值文档地址 respons
  • js写一个简单的计算机,js实现一个简易计算器

    本文实例为大家分享了JS实现简易计算器的具体代码 供大家参考 具体内容如下14th test 这是一个标题 以下是一个简易计算器 第一个数 第二个数 var res 保存计算结果 function add var first documen
  • linux动态链接库的编译和使用

    文章目录 1 动态链接库的编译 2 可执行程序的编译 3 运行可执行程序 4 设置动态库查询目录 方法一 更改环境变量LD LIBRARY PATH 方法二 通过 Wl rpath编译链接选项指定 方法三 修改配置文件 etc ld so
  • 互联网企业使用云计算,有什么优势?

    现如今 上云已经成为企业发展过程中不可逆转的历史潮流趋势 如今 越来越多的企业开始采用云计算 因为它会给企业带来很多惊人的好处 云计算不仅可以降低企业成本 提高灵活性和弹性 还能优化资源的利用 从而提企业高竞争力 自动软件更新 许多公司及其
  • 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装

    个人在目标检测方向的学习比较深入 但在深度学习的图像处理中 语义分割也是一个很重要的方向 所以也想一探究竟 熟悉一下基本流程和工作原理 现打算在LINUX系统Ubuntu16 04上安装mmsegmentation框架 因为之前主要使用mm
  • 百度地图JavaScript API开发GIS服务

    百度地图JavaScript API是由JavaScript语言编写的应用程序接口 支持HTTP和HTTPS 免费对外开放 在使用前 需先申请密钥 ak 才可使用 主要分为两种类型的版本 JavaScript API GL 使用了WebGL
  • map erase 内存释放问题

    资料出处 http www cnblogs com goodness archive 2012 05 16 2503832 html 研究了下c 中map的内存占用情况 很多人说map中的erase以及clear不能释放内存 这几天实验了下
  • 多态介绍。

    Override 规范上 推荐加上 帮你校验是否是方法重写 方法重写在子类继承了父类的方法之后 如果发现在当前的需求下 父类的方法不够强大 所以在子类中就可以对此方法进行重写 特点 1 方法名相同 2 参数列表相同 3 返回值类型不能大于父
  • Python绘制时间序列数据的时序图、自相关图和偏自相关图

    时序图 自相关图和偏相关图是判断时间序列数据是否平稳的重要依据 本文涉及的扩展库numpy pandas statsmodels一般可以使用pip进行在线安装 如果安装失败 可以到http www lfd uci edu gohlke py
  • [Luogu] P1438 无聊的数列

    题目背景 无聊的 YYB 总喜欢搞出一些正常人无法搞出的东西 有一天 无聊的 YYB 想出了一道无聊的题 无聊的数列 K峰 这题不是傻X题吗 题目描述 维护一个数列 a i a i ai 支持两种操作 1 l r K D 给出一个长度等于
  • java 接口类与抽象类

    接口可以继承接口 抽象类可以实现 implements 接口 但不可以继承自接口 抽象类可以继承具体类 抽象类中可以有静态的 main 方法 抽象类里可以有抽象方法 抽象方法一定要在抽象类里 抽象类可以派生 抽象类的父类可以是非抽象类 某一
  • XSS之xss-labs-level5

    文章目录 0x01 XSS Labs 0x02 实验工具 0x03 实验环境 0x04 实验步骤 0x05 实验分析 0x06 参考链接 0x01 XSS Labs XSS 跨站脚本攻击 是指恶意攻击者往Web页面里插入恶意Script代码
  • 递归对比对象函数

    在JavaScript中 对象之间的比较通常通过引用进行 当你使用 运算符比较两个对象时 它会检查它们是否引用了同一个内存地址 而不是逐个比较对象的属性 上图可见 obj1和 是两个不同的对象 尽管它们具有相同的结构 都是空对象 因此 使用