前端小技巧: 实现一个比较两个对象是否相等的方法

前端 项目中 判断两个对象value值是否相等 项目中的实例 看上图知道,点击了支付时,验证了选中行的主体信息,不一致就给提示信息,一致就出现弹框(这里弹框没有写) 那么我们就要在循环遍历的基础上,判断选中的行信息的 某个值是否相等。 也就是 判断两个对象内容值是否相等 假设我们已经点击了支付按钮 最主要的是 let Name = [] // 定义一个空的数组,来存放组织名称 for (let n = 0; n < rowsData.length; n++){ Name.push(rowsData[n].settleEntityNa 阅读详情

思路

  • 实现两个对象的深度比较,模拟 lodash.isEqual() 写出一个简单的方案
  • 地址不一样,属性一样,判定相等

要求

基于以下示例,来判定是否相等

// obj1 和 job2 完全一致
const obj1 = {a:10, b: {x: 100, y: 200}};
const obj2 = {a:10, b: {x: 100, y: 200}};

console.log(isEqual(obj1, obj2))// true

isEqual() 实现

// 判断是否是对象或数组
function isObject(obj) {
    return obj && (typeof obj === 'object');
}

// 全相等(深度)
function isEqual(obj1, obj2) {
	// 值类型(注意,参与 equal 的一般不会是函数)函数不考虑
    if (!isObject(obj1) || !isObject(obj2)) return obj1 === obj2;
    // 允许 obj1 === obj1的情况
    if (obj1 === obj2) return true;
    // 两个都是对象或数组,而且不相等
    // 1. 先取出 obj1 和 obj2 的 keys ,比较个数
    const obj1Keys = Object.keys(obj1);
    const obj2Keys = Object.keys(obj2);
    // 属性个数不同,不全等,包括数组
    if (obj1Keys.length !== obj2Keys.length) return false;
    // 2. 遍历来进行比较,记录最终的 boolean 变量
    let flag = true; // 默认为true
    const keys = Object.keys(obj1);
    keys.some((key) => {
    	// 以 obj1 为基准,和 obj2 一次递归比较
    	const flag = isEqual(obj1[key], obj2[key]);
    	if (!flag) {
    		flag = false;
    		return true;
    	}
    })
    // 3. 返回 flag
    return flag;
}
  • 对于对象属性的处理,递归是一个非常好的方式
  • 对属性的遍历 Object.keys 不会访问原型链上的属性
    • 如需处理原型链上的东西,请使用 for - in 替代
    • 一般而言,不需要处理原型链的对比, 这样会提升性能

代码测试


// 测试
const obj1 = { a: 100,  b: {x:  100, y: 200 } };
const obj2 = { a: 100,  b: {x:  100, y: 200 } };

console.log( obj1 === obj2 ) // false
console.log( isEqual(obj1, obj2) ) // true

const arr1 = [1, 2, 3, 4, [5, [6, 7]]];
const arr2 = [1, 2, 3, 4, [5, [6, 7]]];
console.log(arr1 === arr2); // false
console.log( isEqual(arr1, arr2) ) // true
web前端入门到实战:页面平滑滚动小技巧 背景 今天写需求的时候发现一个小的优化点:用户选择了一些数据之后, 对应列表中的数据需要高亮, 有时候列表很长, 为了提升用户体验,需要加个滚动, 自动滚动到目标位置。简单的处理了一下, 问题顺利解决, 就把这个小技巧分享一下给大家。 正文 有几种不同的方式来解决这个小问题。 1.scrollTop 第一想到的还是scrollTop, 获取元素的位置, 然后直接设置: // 设置滚动的距离 ele... 阅读详情

相关推荐

2024年全国大学生电子设计竞赛A题_AC-AC变换电路并联运行

AC-AC变换电路并联运行(A 题)【本科组】

qq_74395263的博客 7841

深度比较(lodash 的 isEqual 方法)

是一种深度比较,因此它会遍历对象的所有嵌套属性以确保相等性。这对于比较复杂的数据结构(例如嵌套的对象或数组)特别有用。是 Lodash 提供的一个函数,用于比较两个值是否相等。它会递归地比较两个对象的属性和值,以判断它们是否相等。返回值是一个布尔值,如果两个值是完全相等的(包括对象、数组、基本类型等),则返回。

coinisi_li的博客 7976

Matlab Robotics Toolbox实战:四自由度机械臂建模与仿真全流程(附代码)

本文详细介绍了使用Matlab Robotics Toolbox进行四自由度机械臂建模与仿真的全流程,包括DH参数定义、模型构建、可视化、运动学仿真及交互控制。通过实战案例和代码示例,帮助读者快速掌握机械臂建模技巧,提升机器人学习效率。

weixin_42538752的博客 415

如何判断两个对象/数组相等

目录 0.明确两点 1.判断两个对象相等 (1)把两个对象转译成字符串进行对比 (2)Object.keys() (3)ES6 2.判断数组是否相等 0.明确两点 1.当两个引用指向同一个对象时,对象才是相等的; var obj1 = {a:1} var obj2 = obj1 2.obj1 == obj2 结果为false var obj1 = {a:1} var obj2 = {a:1} 1.判断两个对象相等 (1)把两个对象转译成字符串进行对比 ...

接着奏乐接着舞的博客 7838

人工势场法三大致命缺陷?我用ROS+Gazebo做了组对比实验

本文通过ROS与Gazebo仿真实验,深入剖析了人工势场法(APF)在机器人路径规划中的三大经典问题:局部最小值、目标不可达和路径震荡。文章不仅复现了这些缺陷,还对比测试了虚拟目标点法、改进斥力场及运动平滑等主流改进方案,为工程选型提供了基于数据的实用建议。

dapp9builder的博客 219

schrodinger 薛定谔

链接: https://pan.baidu.com/s/1Duh4GsoytIklvZp7TdHpWg 密码: wmr1 Linux系统版 进入 Schrodinger_Suites_2021-2_Linux-x86_64 sudo ./INSTALL 中间按默认的来即可,也可以自己调整安装目录。安装目录一定要记住。 安装完,把patcher 拷贝到安装目录 sudo ./patcher 点击Patch即可。 启动程序,进入安装目录 ./maestro ...

周迪新的博客 1万+

手写lodash.isEqual() 判断两个对象属性值是否相等

先定义两个对象 const obj1 = { a: 100, b: { x: 100, y: 200 } } const obj2 = { a: 100, b: { x: 100, y: 200 } } 是否为对象 function isObject(obj) { return typeof obj === 'object' && obj !== null } isEq

m0_38013931的博客 9231

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1025

Lodash工具比较两个{}对象是否有变化

【代码】Lodash工具比较两个{}对象是否有变化。

zrc_xiaoguo的博客 1934

基于深度学习YOLOv8的商品识别系统(深度学习 + UI界面 + 训练数据集 + Python代码)

如果使用自定义数据集,可以通过图像标注工具如LabelImg来标注每个商品的类别和边界框,并保存为YOLO格式的文本文件。bash复制编辑/dataset/images/train/val/labels/train/val这样,我们就准备好了数据集,可以开始训练YOLOv8模型。本文介绍了如何使用YOLOv8构建一个商品识别系统,包括从数据准备到模型训练,再到UI界面的开发。通过深度学习技术,尤其是YOLOv8的高效目标检测能力,我们能够快速实现商品识别并集成到实际应用中。

YOLO 303

11、体内皮质功能的电压敏感染料成像技术

本文详细介绍了电压敏感染料成像(VSDI)技术在体内皮质功能研究中的应用。内容涵盖VSDI的技术起源、作用机制、信号特点与解读局限性,以及其在映射感觉皮质功能区方面的优势。文章对比了VSDI与电极记录和钙成像技术的差异,突出了其在高时空分辨率下监测神经元群体亚阈值活动的独特价值。同时,提供了完整的实验操作流程,包括手术步骤、染料应用、光学系统配置及数据分析方法,并总结了常见问题及其解决方案。随着基因靶向和多模态技术结合的发展,VSDI有望进一步提升信号特异性和空间精度,成为解析大脑网络动态的重要工具。

Apple的专栏 81

为什么两个看似相等的 Integer 却不相等?一次诡异的缓存折扣商品 BUG 排查

我们在今天的代码审查中,我发现了新来的同事小龙写了这样一段逻辑,用于判断当前商品是否为后台设置的折扣商品引发了BUG,这次折扣商品匹配 BUG 的根源在于 把 == 用于 Integer 对象比较。由于 Java 的 Integer 缓存机制,小整数可以“碰巧”相等,而大整数则不会,从而导致了诡异的 BUG

Micro麦可乐的博客 5477

芒果YOLO11改进17:即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

包括YOLOv5、YOLOv7、YOLOv8等模型改进 485

前端非常好用又实用的小技巧

本文总结了前端开发的十大实用技巧:1. 布局优化技巧包括inset简写定位、CSS Grid自动填充列和空元素隐藏;2. JavaScript高效实践如IntersectionObserver懒加载和WeakMap防内存泄漏;3. 主题切换采用CSS变量实现;4. 推荐Flexbox和Grid简化布局;5. 文本溢出使用省略号处理;6. 伪元素装饰技巧;7. 移动优先的响应式断点策略;8. 防止图像变形的object-fit方法;9. 对比Less和SCSS的预处理特性;10. 矢量图标使用方案,包括SVG

2401_84520694的博客 2335

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

js中比较两个日期的大小

使用js处理两日期的字符串的比较大小时,总结出俩的一些小技巧: function time(){ var date = new Date(); var year = date.getFullYear(); var month = date.getMonth()+1; var day = date.getDate(); var opra_date = ...

3344

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

记录一些前端好用的小技巧

记录一些前端好用的小技巧 1.优雅编写js的if判断 在项目中我们难免会遇到一些需要判断很多个条件的if判断 // 多条件判断开始,如下 if (obj.radio1 || obj.checkbox1.length > 0 || obj.input1 || obj.inputNumber1 > 0 || obj.select1 || obj.select2.length > 0 || obj.switch1 || obj.radio2 || obj.checkbox2.length &g

buxuezhe的博客 873

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于springboot post方法参数为两个实体类的解决办法

title: 关于springboot post方法参数为两个实体类的解决办法 cover: /img/1.jpg 前端调用后端api某个post方法的时候,如果发现方法的参数为两个实体类的时候,我们像往常一样传参,后台会发生接收不到参数的问题。 1.分装成dto 如果两个参数都是实体类的话,可以采用将两个实体类封装成一个实体类的方法。比如说有两个实体类,Techer和Course 这是两个po...

qq_38606793的博客 2万+

每天一个前端小技巧——生成gif动图下载

每天一个前端小技巧——生成gif动图下载 动态热图的展现,分别展现某个时间段的热图时间变化,例如:最近一周七天内,每天的热图分布变化图;这个动态变化的图生成一个gif图提供下载是否可行? 实现方案: 1.可通过服务端生成对应gif,然后前端请求下载 2.前端自己实现生成gif图片,自行下载采用方案: 前端实现方式,于是在网上找各种相关的几款组件调研,均有利弊,推荐两款好用并且稳定的组件: 1 html2canvas.js 官网:http://html2canvas.hertzen.com/ 2 gif

weixin_46768460的博客 1910

前端小技巧

前端小技巧 一、网页各种宽高 页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);网页正文全文宽: document.body.s...

weixin_30740295的博客 82

js 判断一个变量是否属于另一个对象、数组?(万能全)

前言 js小技巧,后续会继续完善。 1、判断该字段是否属于obj的某一个: //直接使用 in var date={"id":"1","name":"张三","age":"12","po_create_time":"2021年12月20"} if('po_create_time' in date){//成文日期 data.po_create_time = data.po_create_time.replace("年","-"); if(data.po_c

L4937的博客 430

前端小技巧: TS实现new出一个对象的内部过程

{} 创建空对象,原型指向 Object.prototype。Object.create 创建空对象,原型指向传入的参数。

Wang的专栏 1318

前端知识:12个非常实用的JavaScript小技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧。这些小技巧可能在你的实际工作中或许能帮助你解决一些问题。 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值。为了做这样的验证,我们可以使用!!操作符来实现...

chenhuiqin2015的博客 165

前端:每天一个工作小技巧 如何实现一个前端的选中效果(Vue3 + Element ui)

前言大家好我是歌谣今天继续给大家带来平时工作生活中会遇到的一些开发需求 今天要说的需求就是实现一个需求在选中的时候按钮的样式会发生变化思路 首先遇到这样的需求我们所需要做的就是要分析 先简单画出我们所需要的样式 这是我们设计需求的第一步效果实现点击的时候右侧的颜色选中会改变左侧的页面效果 这就是我们所需要的页面部分<template> &lt...

qq_41632427的博客 531

【前端小技巧】用CSS隐藏元素的几种方法

更多内容,请访问我的 个人博客。 前言 2021 年最后一天,疫情还没有完全结束,武汉市政府也取消了跨年活动。今晚,就连地铁都提前到 9 点关闭,大家都在家里跨年。这不,我也在家里跨年。不过我并没有看晚会,而是整理了一篇前端小技巧,算是给自己 2021 年一个小小的总结。 正文 用 CSS 隐藏元素有很多种方法,这里介绍 3 种常见的。 opacity: 0 特点是【看不见,占空间,摸得着】 元素隐藏 不改变布局 如果绑定了事件,点击该区域,是可以触发事件的 visibility: hidden 特

潘高的小站 929

前端加速图片的一些小技巧

这样,不同设备和屏幕尺寸的用户可以加载适合其设备的最佳图像,并避免加载过大或过小的图像。但是最新的图片格式毕竟还是存在兼容性问题,我们在使用时应该考虑的是,如何实现在支持的浏览器上使用 AVIF,不支持的浏览器上降级使用 JPG。不同的设备,所需的图片大小不需要一致, 在 4K 屏上,需要高分辨率的,对应的小屏幕如手机上,如果仍然加载高分辨的图片,这无疑是一种浪费。如果一个网站的页面包含大量的图片,一般初始加载的时候,我们是期望它不要加载所有的图片的,只需要加载用户当前看得到的区域内的图片就行了。

qq_42778289的博客 3006

【持续更新】一些前端的小技巧

本人原本是java后台程序员一枚,因为最近接触到微信公众号,不得不从事一些前端的工作。 作为一名前端小白,在项目的学习过程中,本着学习的原则,记录和累积自己收集和运用到的一些小技巧,方便以后的学习也希望能给其他小白一些干货和指出一些坑吧。大神勿喷,欢迎指导。 1,利用js遍历json对象数组(列表) 可以使用for in 没错,但是!!!(特别是有java或其他基础的人来说)坑点在于i...

chenruijia170707的博客 1965
上一篇: AIGC: 关于ChatGPT中基于Whisper模型实现音频转文本
下一篇: 前端小技巧: 写一个异步程序示例, 使用任务队列替代promise和async/await等语法糖
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值