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

news2024/11/18 9:48:06

在这里插入图片描述

博主:東方幻想郷 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 长度不会监听到深层次的key
    if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {
		return false
	}
}

⭐ 第二步 循环 obj 进行判断两个对象

  1. ⚡判断两个对象的 prop 是否为 object
function objectsComparison(obj_one, obj_two) {
	// 判断两个对象的key长度是否一致,若不一致返回false
    // 此时 key 长度不会监听到深层次的key
    if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {
		return false
	}
	// 循环对象,判断每一项
    for (let prop in obj_one) {
        // 判断两个对象每一项是否为object
        if (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {
           
        } 
    }
}

⭐ 第三步 递归条件判断两个对象深层次对象

  1. ⚡递归条件判断两个对象的深层次对象是否符合本方法的所有条件,若不符合,返回false
function objectsComparison(obj_one, obj_two) {
	// 判断两个对象的key长度是否一致,若不一致返回false
    // 此时 key 长度不会监听到深层次的key
    if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {
		return false
	}
	// 循环对象,判断每一项
    for (let prop in obj_one) {
        // 判断两个对象每一项是否为object
        if (typeof obj_one[prop] === 'object' && typeof obj_two[prop] === 'object') {
            // 使用递归条件监听两个深层次的对象
            if (!objectsComparison(obj_one[prop], obj_two[prop])) {
				return false
		    }
        } 
    }
}

⭐ 第四步 判断两个对象的值是否相同

  1. ⚡判断两个对象值是否相同,不相同返回false
function objectsComparison(obj_one, obj_two) {
	// 判断两个对象的key长度是否一致,若不一致返回false
    // 此时 key 长度不会监听到深层次的key
    if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {
		return false
	}
	// 循环对象,判断每一项
    for (let prop in obj_one) {
        // 判断两个对象每一项是否为object
        if (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 长度不会监听到深层次的key
    if (Object.keys(obj_one).length !== Object.keys(obj_two).length) {
        return false
    }
    // 循环对象,判断每一项
    for (let prop in obj_one) {
        // 判断两个对象每一项是否为object
        if (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
}

🌠 以上是 使用递归 判断连个对象是否完全一致的判断方法
🌠 希望能够帮助到你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络攻击新威胁

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络攻击新威胁1) 人工智能的应用2) 5G和物联网的崛起3) 云安全4) 社交工程的威胁 总结 ChatGPT(全名:Chat Generative Pre-trained Transformer)&#xff0…

大龄、零基础,想转行做网络安全。怎样比较可行?这届粉丝可真难带

昨晚上真的给我气孕了。 对于一直以来对网络安全兴趣很大,想以此作为以后的职业方向的人群。 不用担心,你可以选择兼顾工作和学习,以步步为营的方式尝试转行到网络安全领域。 那么,网络安全到底要学些什么呢? &…

getline()与cin.getline()

文章目录 1.getline2.cin.getline3.区别 1.getline 读取一行内容。定义为: istream& getline (istream& is, string& str, char delim);参数一:istream &is 表示一个输入流,譬如cin; 参数二:string…

Tensorflow2基础代码实战系列之双层RNN文本分类任务

深度学习框架Tensorflow2系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark …

自动化测试工具selenium的使用方法

一、前言 由于requests模块是一个不完全模拟浏览器行为的模块,只能爬取到网页的HTML文档信息,无法解析和执行CSS、JavaScript代码,因此需要我们做人为判断; selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作&…

Python爬虫入门案例6:scrapy的基本语法+使用scrapy进行网站数据爬取

几天前在本地终端使用pip下载scrapy遇到了很多麻烦,总是报错,花了很长时间都没有解决,最后发现pycharm里面自带终端!(狂喜),于是直接在pycharm终端里面写scrapy了 这样的好处就是每次不用切换路…

项目风险应对策略:项目经理应对不确定性的指南

风险应对是项目经理管理项目未来的工具箱。它可以帮助管理人员弄清楚可能会出现什么问题,并让他们有机会为这些问题做好准备。 对抗负面风险的5种策略 如果没有风险管理计划,项目可能会因意外问题或不良风险而迅速脱轨。什么策略可以用来对抗负面风险&…

Salesforce认证|新鲜出炉销售代表认证!

Salesforce一直致力于为专业人士提供测试知识与技能的方法,现在终于轮到销售人员了! 前不久,Salesforce宣布推出销售代表认证,这不仅是首个面向销售人员的认证,也是为数不多的非技术类、非顾问类认证,这为…

记录 aaPanel 安装环境失败的经历及解决方案

最近我在一台Debian 11的国外服务器上安装aaPanel(即宝塔面板的国际版)。在安装完面板后,我继续安装LNMP环境。几分钟后,aaPanel提示LNMP环境已经安装成功。然而,在创建站点时,却提示环境没有安装。 问题排…

财务共享中心成功建立!用友帮助河南水投集团打造财务效率新高地

河南水投集团作为省级水务集团,自成立以来一直坚持以资产筹集资金,以资金建设项目,以运营扩张资本。即使在面对经济下行压力及疫情影响双重挑战下,仍坚持结果导向,通过项目建设推动发展,保持了较好的发展态…

MyBatisPlus更新字段为null的正确姿势以及lambda方式的条件字段解析之源码解析

文章目录 [toc] 1.问题2.原因3.解决方法3.1错误方法方式一:配置全局字段策略方式二:在实体上添加字段策略注解 3.2正确姿势方式一:使用LambdaUpdateWrapper (推荐)方式二:使用UpdateWrapper方式三 总结 1.问…

沉降仪工作原理

输电线路杆塔倾斜北斗在线监测装置 一、产品概述 杆塔、铁塔在时间、自然因素的影响下,发生的倾斜、偏离等现象,而在人工巡检电力设施时是不容易通过人眼判别的,在日积月累的变化中,铁塔、杆塔会因倾斜幅度过大进一步引发严重的坍…

基于 Bert 论文构建 Question-Answering 模型

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 摘要 本文拜读了提出 Bert 模型的论文,考虑了在 Bert 中算法模型的实现.比较了 Bert 与其他如 Transformer、GPT 等热门 NLP 模型.BERT 在概念上很简单,在经验上也很强大。它推动了 11 项自然语言处理任…

“她经济”崛起,茉莉智慧如何以科技赋能月子中心迭代升级?

近年来,利好生育政策频出,女性消费能力不断提升,以月子中心为核心的产后护理赛道发展势头良好。据iiMedia Research数据,2022年中国月子中心市场规模突破223.0亿元。iiMedia Research市场调查显示,93.5%的受访者认为产…

ubuntu命令记录

centos 下载地址: 网易镜像:http://mirrors.163.com/centos/6/isos/ 搜狐镜像:http://mirrors.sohu.com/centos/6/isos/ VM与LINUX的安装(虚拟机的安装) 注意:a.必须开启虚拟化(一般电脑都默认…

BFT 最前线 | 王小川:2033机器智慧将超人类;扎克伯格财富暴涨;哈工大:能跳跃的昆虫机器人;北京支持“1+4”机器人领域

原创 | 文 BFT机器人 名人动态 CELEBRITY NEWS 01 王小川:10年后机器智慧将超过人类 年底将推出对标GPT-3.5的模型 科技预言大师雷库兹韦尔说人工智能的奇点,机器智慧超过人类会发生在2045年,王小川的判断比这更激进,他认为这一…

复杂的C++继承

文章目录 什么是继承继承方式赋值规则继承中的作用域(隐藏)子类中的默认成员函数需要自己写默认成员函数的情况 继承与友元及静态成员多继承菱形继承菱形继承的问题菱形虚拟继承 继承和组合 面向对象三大特性:封装继承和多态。封装在类和对象…

2172. 最大公约数

Powered by:NEFU AB-IN Link 文章目录 2172. 最大公约数题意思路代码 2022年第十三届决赛真题 2172. 最大公约数 题意 给定一个数组, 每次操作可以选择数组中任意两个相邻的元素 x , y x, yx,y 并将其 中的一个元素替换为 gcd ⁡ ( x , y ) \operatorname{gcd}(x, y)gcd(x,y),…

从月薪5000到月薪20000,自动化测试应该这样学...

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

征稿丨IJCAI‘23大模型论坛,优秀投稿推荐AI Open和JCST发表

第一届LLMIJCAI’23 Symposium征稿中,优秀投稿论文推荐《AI Open》和 《JCST》发表。 大规模语言模型(LLMs),如ChatGPT和GPT-4,以其在自然语言理解和生成方面的卓越能力,彻底改变了人工智能领域。 LLMs广泛…