【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()函数就派上…...
Hitboxer:终极SOCD按键重映射解决方案,彻底解决游戏按键冲突问题
Hitboxer:终极SOCD按键重映射解决方案,彻底解决游戏按键冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对战中,你是否曾因同时按下左右方向键而导致角色…...
【小白快速上手】 OpenClaw 安装部署全流程(含安装包)
OpenClaw 一键安装包|一键部署,告别复杂环境配置 适配系统:Windows10/11 64 位当前版本:v2.7.5(虾壳云版)核心优势:全程可视化操作,无需命令行、无需手动配置 Python/Node.js&#…...
事故数据四年连降,为何山西煤矿的命还是悬在一根绳上?
说实话,写到山西煤矿这四个字,我心里就咯噔一下。2026年5月22日19时29分,山西长治市沁源县山西通洲集团留神峪煤业有限公司井下发生瓦斯爆炸事故,截至到写稿,事故已造成90人遇难。看的心里堵得慌。我特意去翻了翻这些年…...
别再乱调了!深度解析URP相机Culling Mask与Occlusion Culling,让你的游戏性能提升一个档次
别再乱调了!深度解析URP相机Culling Mask与Occlusion Culling,让你的游戏性能提升一个档次在Unity游戏开发中,性能优化是一个永恒的话题。尤其是使用URP(Universal Render Pipeline)进行开发时,相机的合理配…...
Better ClearType Tuner:Windows 10字体渲染优化终极指南
Better ClearType Tuner:Windows 10字体渲染优化终极指南 【免费下载链接】BetterClearTypeTuner A better way to configure ClearType font smoothing on Windows 10. 项目地址: https://gitcode.com/gh_mirrors/be/BetterClearTypeTuner Better ClearType…...
自动驾驶多摄像头三平面令牌化技术解析
1. 多摄像头令牌化技术背景与挑战在自动驾驶系统中,实时处理多摄像头数据是实现环境感知的基础。传统基于ViT(Vision Transformer)的令牌化方案存在明显的计算瓶颈——每个摄像头输入的图像被分割为1616像素块进行编码,导致令牌数…...
vue2-admin-lte vs 原生AdminLTE:为什么选择Vue.js重构后台系统?
vue2-admin-lte vs 原生AdminLTE:为什么选择Vue.js重构后台系统? 【免费下载链接】vue2-admin-lte :bar_chart: adminLTE to vuejs v2.x converting project 项目地址: https://gitcode.com/gh_mirrors/vu/vue2-admin-lte vue2-admin-lte是基于V…...
基于强化学习的量子传感器电路优化:多目标权衡与工程实践
1. 量子传感器电路优化的核心挑战与机遇量子传感器,这个听起来有些科幻的名词,正逐渐从实验室走向现实应用的前沿。它的核心魅力在于,能够利用量子力学中那些“反直觉”的特性——比如叠加和纠缠——来感知我们周围世界极其微小的变化&#x…...
3D激光SLAM入门:点云曲率计算与LOAM边缘/平面特征提取(附代码)
专栏系列:3D激光SLAM从零到精通 | 难度:中级 | 预计阅读:25分钟 前置知识:Python编程,numpy基础,3D点云的基本概念 摘要 本文深入讲解3D激光SLAM中最基础也是最关键的一环——点云特征提取。我们将从LOAM论…...
LLM提示压缩技术:原理、实现与优化实践
1. 提示压缩技术概述在大型语言模型(LLM)应用中,推理延迟已成为关键瓶颈。当处理包含多个检索段落的RAG(检索增强生成)系统时,长上下文会导致提示(prompt)体积膨胀,显著增…...
