当前位置: 首页 > news >正文

js 比较两个对象的值是否相等

在JavaScript中,比较两个对象是否相等通常涉及到几个关键点。直接比较两个对象的引用(即使用=====)通常不会比较它们的值,除非它们指向同一个内存地址(即同一个对象实例)。要比较两个对象的值是否相等,就需要逐个比较它们的属性。

方法1:浅比较(不考虑嵌套对象)

如果只需要比较对象的顶层属性,可以使用以下方法:

function areObjectsEqual(obj1, obj2) {const keys1 = Object.keys(obj1);const keys2 = Object.keys(obj2);if (keys1.length !== keys2.length) {return false;}for (let key of keys1) {if (obj1[key] !== obj2[key]) {return false;}}return true;
}const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };
const obj3 = { a: 1, b: 3 };console.log(areObjectsEqual(obj1, obj2)); // true
console.log(areObjectsEqual(obj1, obj3)); // false

方法2:深比较(考虑嵌套对象)

如果需要比较嵌套对象,可以使用递归或使用库函数如lodashisEqual函数:

function deepEqual(x, y) {if (x === y) {return true;}if (typeof x !== 'object' || x === null ||typeof y !== 'object' || y === null) {return false;}const keysX = Object.keys(x);const keysY = Object.keys(y);if (keysX.length !== keysY.length) {return false;}for (let key of keysX) {if (!keysY.includes(key) || !deepEqual(x[key], y[key])) {return false;}}return true;
}const obj4 = { a: 1, b: { c: 2 } };
const obj5 = { a: 1, b: { c: 2 } };
const obj6 = { a: 1, b: { c: 3 } };console.log(deepEqual(obj4, obj5)); // true
console.log(deepEqual(obj4, obj6)); // false
使用插件lodash的isEqual
const _ = require('lodash');const obj7 = { a: 1, b: { c: 2 } };
const obj8 = { a: 1, b: { c: 2 } };
const obj9 = { a: 1, b: { c: 3 } };console.log(_.isEqual(obj7, obj8)); // true
console.log(_.isEqual(obj7, obj9)); // false

最后:

选择哪种方法取决于具体需求。对于简单的场景,浅比较就足够了。如果需要处理嵌套对象或复杂的数据结构,建议使用深比较或lodashisEqual函数。这样可以确保所有层级的属性都被正确比较。

http://www.xdnf.cn/news/890713.html

相关文章:

  • 【数据集】MODIS 8日合成1公里地表温度LST产品
  • Ubuntu20.04配置静态ip
  • 摄像头模块未来技术发展方向
  • 行业赋能篇-2-能源行业安全运维升级
  • MLP(多层感知机)
  • 算法复杂度,咕咕咕
  • 晨读笔记 6-5 (主题:打造15分钟就业服务圈)
  • SpringBoot+Mysql实现的停车场收费小程序系统+文档
  • GPU显存的作用和如何选择
  • 带有输入的CDS和程序调用
  • 极限c++模拟卷
  • 使用 Run:ai Model Streamer 实现模型的高效加载
  • JAVASCRIPT 简化版数据库--智能编程——仙盟创梦IDE
  • AI Agent时代里的SAAS是伪命题还是突破点?
  • spring4第7-8课-AOP的5种通知类型+切点定义详解+执行顺序
  • 如何配置Git LFS?
  • Next打包导出静态文件(纯前端),不要服务器端(node), 隐藏左下角调试模式(“next“: “^15.3.3“,)
  • 力扣刷题Day 71:搜索旋转排序数组(33)
  • dvwa13——CSP Bypass
  • ubuntu 端口复用
  • Ubantu-Docker配置最新镜像源250605
  • PHP 打印扩展开发:从易联云到小鹅通的多驱动集成实践
  • 打造高效多模态RAG系统:原理与评测方法详解
  • Cad 反应器 cad c#二次开发
  • 【复杂指令遵循 Benchmark】论文分享:CodeIF-Bench
  • 软件开发中的“需求镀金”现象如何避免?
  • 大屏缩放视频比例适配记录
  • Canvas的使用
  • 计算机网络安全问答数据集(1788条) ,AI智能体知识库收集! AI大模型训练数据!
  • AI04A AI模块,16通道,TC / mV