【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言

博主:東方幻想郷 Or _LJaXi
专栏分类:JavaScript | 脚本语言
JavaScript 递归 - 判断两个对象的键值
- 🌕 起因
- 🌓 代码流程
- ⭐ 第一步 判断两个对象的长度是否一致
- ⭐ 第二步 循环 obj 进行判断两个对象
- ⭐ 第三步 递归条件判断两个对象深层次对象
- ⭐ 第四步 判断两个对象的值是否相同
- ⭐ 第五步 若以上步骤都不符合,返回true
- 🌑 完整代码
🌕 起因
记得当时我是有写过一个判断两个对象内的键值手否相同的文章
使用 md5-js 判断两个对象键值是否相同
但是当时比较菜,递归也看不太懂,所以就用了别人的包
🌓 代码流程
💨 💨💨 首先明确一下需求
首先要有两个 Object
封装一个方法来判断两个对象内的keys,并且要支持深层次判断
⭐ 第一步 判断两个对象的长度是否一致
首先 声明一个判断对象的方法,我们就叫他 objectsComparison,提供两个形参: obj_one,obj_two
理一下思路:既然要判断两个对象中的每一项 且 每一项中的深层次对象都一致的话
1.⚡先判断两个对象keys的长度是否相同
function objectsComparison(obj_one, obj_two) {// 判断两个对象的key长度是否一致,若不一致返回false// 此时 key 长度不会监听到深层次的keyif (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}
}
⭐ 第二步 循环 obj 进行判断两个对象
- ⚡判断两个对象的 prop 是否为 object
function objectsComparison(obj_one, obj_two) {// 判断两个对象的key长度是否一致,若不一致返回false// 此时 key 长度不会监听到深层次的keyif (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}// 循环对象,判断每一项for (let prop in obj_one) {// 判断两个对象每一项是否为objectif (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {} }
}
⭐ 第三步 递归条件判断两个对象深层次对象
- ⚡递归条件判断两个对象的深层次对象是否符合本方法的所有条件,若不符合,返回false
function objectsComparison(obj_one, obj_two) {// 判断两个对象的key长度是否一致,若不一致返回false// 此时 key 长度不会监听到深层次的keyif (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}// 循环对象,判断每一项for (let prop in obj_one) {// 判断两个对象每一项是否为objectif (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {// 使用递归条件监听两个深层次的对象if (!objectsComparison(obj_one[prop], obj_two[prop])) {return false}} }
}
⭐ 第四步 判断两个对象的值是否相同
- ⚡判断两个对象值是否相同,不相同返回false
function objectsComparison(obj_one, obj_two) {// 判断两个对象的key长度是否一致,若不一致返回false// 此时 key 长度不会监听到深层次的keyif (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}// 循环对象,判断每一项for (let prop in obj_one) {// 判断两个对象每一项是否为objectif (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {// 使用递归条件监听两个深层次的对象if (!objectsComparison(obj_one[prop], obj_two[prop])) {return false}// 对象键不相等,也会返回false} else if (obj_one[prop] !== obj_two[prop]) {return false}}
}
⭐ 第五步 若以上步骤都不符合,返回true
function objectsComparison(obj_one, obj_two) {// 判断两个对象的key长度是否一致,若不一致返回false// 此时 key 长度不会监听到深层次的keyif (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}// 循环对象,判断每一项for (let prop in obj_one) {// 判断两个对象每一项是否为objectif (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {// 使用递归条件监听两个深层次的对象if (!objectsComparison(obj_one[prop], obj_two[prop])) {return false}// 对象键不相等,也会返回false} else if (obj_one[prop] !== obj_two[prop]) {return false}}// 若以上条件都不成立,返回true,两个对象完全一致return true
}
🌑 完整代码
function objectsComparison(obj_one, obj_two) {if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {return false}for (let prop in obj_one) {if (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {if (!objectsComparison(obj_one[prop], obj_two[prop])) {return false}} else if (obj_one[prop] !== obj_two[prop]) {return false}}return true
}
🌠 以上是 使用递归 判断连个对象是否完全一致的判断方法
🌠 希望能够帮助到你
相关文章:
【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
博主:東方幻想郷 Or _LJaXi 专栏分类:JavaScript | 脚本语言 JavaScript 递归 - 判断两个对象的键值 🌕 起因🌓 代码流程⭐ 第一步 判断两个对象的长度是否一致⭐ 第二步 循环 obj 进行判断两个对象⭐ 第三步 递归条件判断两个对象…...
卷积、相关、匹配滤波、脉冲压缩以及模糊函数
文章目录 【 1. 卷积 】1.1 连续卷积1.2 离散卷积【 2.相关 】2.1 自相关2.2 互相关【 3.匹配滤波 】3.1 滤波器模型3.2 有色噪声-匹配滤波器3.3 白噪声-匹配滤波器3.3.1 原始-白噪声-匹配滤波器3.3.2 简化-白噪声-匹配滤波器3.4 动目标的匹配滤波【 4.脉冲压缩】4.1 时域脉冲压…...
C# 栈(Stack)
目录 一、概述 二、基本的用法 1.入栈 2.出栈 Pop 方法 Peek 方法 3.判断元素是否存在 4.获取 Stack 的长度 5.遍历 Stack 6.清空容器 7.Stack 泛型类 三、结束 一、概述 栈表示对象的简单后进先出 (LIFO) 非泛型集合。 Stack 和 List 一样是一种储存容器&#x…...
网络流量监控及流量异常检测
当今的企业面临着许多挑战,尤其是在监控其网络基础设施方面,需要确保随着网络规模和复杂性的增长,能够全面了解网络的运行状况和安全性。为了消除对网络性能的任何压力,组织应该采取的一项重要行动是使用随组织一起扩展的工具监控…...
六.热修复
文章目录 前言什么是热修复?如何进行热修复?热修复需要解决的问题 1.Android常用的热修复解决方案2.ClassLoader类加载机制2.1 Android类加载器2.2 双亲委托机制2.3 类查找流程 3.插桩式热修复运行期修复落地3.1 什么是字节码插桩?3.2 ASM3.3…...
2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?
谣言 互联网上有传言说我们应该避免在单个 MySQL 表中有超过 2000 万行。否则,表的性能会下降,当它超过软限制时,你会发现 SQL 查询比平时慢得多。这些判断是在多年前使用HDD硬盘存储时做出的。我想知道在2023年对于基于SSD的MySQL数据库来说…...
jvm问题排查
常用工具 命令查询资源信息 top:显示系统整体资源使用情况 vmstat:监控内存和 CPU iostat:监控 IO 使用 netstat:监控网络使用 查看java进程 jps 查看运行时信息 jinfo pid gc工具 jstat: 查看jvm内存信息 GCViewer — 离线分析G…...
【Redis】浅谈Redis-集群(Cluster)
文章目录 前言1、集群实现1.1 创建cluster目录,并将redis.conf复制到该文件夹1.2 复制redis.conf,并进行配置1.3 启动redis,查看启动状态1.4 合成集群1.5 查看集群1.6 集群读写操作 2、SpringBoot整合redis集群2.1 引入包2.2 设置配置2.3 使用…...
Python3实现基于ARIMA模型来预测茅台股票价格趋势
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
自动化测试selenium环境搭建
自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化? 自动化测试能够代替一部分的手工测试,自动化测试能够提高测试的效率。随着项目功能的增加,版本越来越多,版本的回归测试的压力也…...
SaaS系统平台,如何兼顾客户的个性化需求?
在当今数字化的商业环境中,SaaS系统已经成为企业运营的重要组成部分之一。 SaaS系统平台的好处是显而易见的,可以将业务流程数字化,从而帮助企业提高效率并节省成本。 但是,由于每个企业的业务都不尽相同,所以在选择Sa…...
QDir拼接路径解决各种斜杠问题
一般在项目中经常需要组合路径,与其他程序进行相互调用传递消息通信。 经常可能因为多加斜杠、少加斜杠等问题导致很多问题。 为了解决这些问题,我们可以使用QDir来完成路径的拼接,不直接拼接字符串。 QDir的静态方法QDir::cleanPath() 是为了规范化路径名的,在使用QDir组…...
mycat2主从配置实现读写分离
mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源,可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…...
如何在Centos7中安装Kubernetes
一、概述 Kubernetes([kubə’netis]),简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写,它是一个由Google 开源的全新的分布式容器集群管理系统。 二、准备 IP角色内存192.168.1.130master4G192.168.1.1…...
Stream强化
使用stream求list的对象属性的和 假设有一个Student类,其中有一个属性是score,可以通过以下代码求出List<Student>中score的和: List<Student> students new ArrayList<>(); // 添加学生对象到List中 int sum student…...
第一部分-基础篇-第一章:PSTN与VOIP(下篇)
文章目录 序言上一篇文章:1.6 电路交换与分组交换1.6.1 电路交换1.6.2 分组交换 1.7 VoIP1.8 IMS1.8.1 什么是IMS1.8.2 IMS的特点1.8.3 IMS核心网元(1 ) CSCF(2 ) MGCF(3 ) IM-MGW(5…...
《汇编语言》- 读书笔记 - 第4章-第一个程序
《汇编语言》- 读书笔记 - 第4章-第一个程序 4.1 一个源程序从写出到执行的过程4.2 源程序程序 4.11. 伪指令1.1 segment ends 声明段1.2 end 结束标记1.3 assume 关联 2. 源程序中的“程序”3. 标号4. 程序的结构5. 程序返回6. 语法错误和逻辑错误 4.3 编辑源程序4.4 编译4.5 …...
AI工具 ChatGPT-4 vs Google Bard , PostgreSQL 开发者会pick谁?
在人工智能 (AI) 进步的快节奏世界中,开发人员正在寻找最高效和突破性的解决方案来加快和提高他们的工作质量。对于 PostgreSQL 开发人员来说,选择理想的 AI 支持的工具以最专业的方式解决他们的查询至关重要。 近年来,人工智能工具的普及率…...
【网络】基础知识1
目录 网络发展 独立模式 网络互联 局域网LAN 广域网WAN 什么是协议 初识网络协议 协议分层 OSI七层模型 TCP/IP四层(或五层)模型 OSI和TCP/IP对比 网络传输流程 什么是报头 局域网通信原理 同网段的主机通讯 跨网段的主机通讯 数据包封装…...
chatgpt赋能python:Python倒序range的完整指南
Python倒序range的完整指南 Python是一种高级编程语言,很多人认为它非常容易学习和使用。其中一个非常有用的功能是range()函数,可以生成数字序列。然而,有时候我们需要以相反的顺序生成这个数字序列,这时候倒序range()函数就派上…...
ARMv8-A架构革命——超越64位寻址的三大范式转移
该文章同步至公众号OneChan 开篇:回答上篇进阶思考 在上一篇的结尾,我们留下了三个问题,现在让我们逐一探讨: 1. 从A53到A55再到A510,ARM的小核设计哲学如何演变? Cortex-A53 (2014):定义了“…...
113. 强制使用 Letsencrypt ECDSA 和 DNS-01 续期挑战的默认 HTTPS Rancher 证书
Environment 环境 2.9 Situation 地理位置A self-signed default Rancher certificate is currently used and will be migrated to a stronger Let’s Encrypt ECDSA-386 certificate using the DNS-01 renewal challenge. 目前使用自签名默认的牧场证书,并将通过…...
nginx——方向代理和负载均衡
目录 1.1 Nginx概述 1.1.1 企业青睐 Nginx 的核心原因 1.1.2 Nginx的作用 1.3 反向代理和负载均衡 1.4 注 1.4.1 代理百度并使用 18090 端口 1.1 Nginx概述 1.1.1 企业青睐 Nginx 的核心原因 Nginx 由俄罗斯开发者打造,具有超高稳定性(资源占用极低…...
重生之我用 AI 复活了我的同事
阅读本文大概需要 2.8 分钟。在写这篇文章之前先解答上篇文章评论区反映的两个问题:第一个问题,有人读完文章说,张哥,那以后是用 AI 还是不用呢?当然要用了,而且是鼓励大家全面使用。我文章本意是 AI 发展之…...
Java互联网大厂求职面试实录:Spring Boot、微服务与全栈技术深度解析
Java互联网大厂求职面试实录:Spring Boot、微服务与全栈技术深度解析 面试场景介绍 本文以互联网大厂面试为背景,通过严肃的面试官与搞笑的水货程序员“谢飞机”的对话,深入探讨Java求职者面试中常见的技术问题。涵盖Java SE、Jakarta EE、Sp…...
OpenClaw学习助手:Gemma-3-12b-it生成错题本与定制复习计划
OpenClaw学习助手:Gemma-3-12b-it生成错题本与定制复习计划 1. 为什么需要AI学习助手? 作为一名经常需要处理大量学习资料的开发者,我一直在寻找能够提升学习效率的工具。传统的错题本整理方式需要手动抄写题目、标注知识点、寻找同类练习题…...
ECharts折线图入门学习:从基础到实战的完整指南
引言 折线图是数据可视化中最常用的图表类型之一,特别适合展示数据随时间变化的趋势。ECharts作为一款功能强大的JavaScript可视化库,提供了丰富的配置选项和交互功能,能够轻松创建出专业、美观的折线图。本文将带领大家从零开始学习ECharts折…...
智谱CEO张鹏:将推理性能压榨至极限 不为短期盈利,而是为高质量Token消耗指数曲线
雷递网 乐天 3月31日智谱CEO张鹏今日在智谱2025年年报沟通会上表示,智谱曾经历过质疑,经历过挫折,但无数事实反复验证了一个判断——智能上界的提升,是大模型AGI时代唯一的"第一性"。张鹏说,AGI时代的商业价…...
DeepSeek-Coder-V2终极指南:如何免费打造你的专属AI编程助手
DeepSeek-Coder-V2终极指南:如何免费打造你的专属AI编程助手 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 …...
RAG系统的需求分析
这个是一个基于私有知识库的智能对话平台,允许用户上传文档构建专属知识库,并通过自然语言交互的方式查询和获取知识。它结合了大语言模型和向量检索技术,让用户通过对话的形式与自己的知识库进行高效交互应用场景个人用户场景:学习助手&…...
