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

鸿蒙中判断两个对象是否相等

序言

在鸿蒙开发中由于其使用@Observed修饰的类会改变原型链,特别是里面的字段。在比较两个类是否相等的时候就会有问题。

在这里插入图片描述

举例

比如鸿蒙中的泛型功能比较弱,不能定义方法。有时候就要使用。静态变量,和私有化构造函数来实现自己的枚举。
在这里插入图片描述
但是由于存在原型链被修改的情况。通过==符合是不能比较两个对象是否相等的。比如下面两个内容是一样的,但是类都不相同。

这个时候需要编写一个工具栏,通过判断两个对象中的属性是否相同,来判断两个对象是否相同。

function isObject(obj: ESObject): boolean {return obj !== null && typeof obj === 'object';
}/*** 判断 obj1 是否包含 obj2 的所有属性,并且值都一致* @param obj1 基础对象(可以比 obj2 多)* @param obj2 比较对象(必须是 obj1 的子集)* @returns boolean*/
export  function isEqual(obj1: ESObject, obj2: ESObject): boolean {if (obj1 === obj2) {return true;}// 如果其中一个是 null 或者不是对象,直接比较是否相等if (!isObject(obj1) || !isObject(obj2)) {return obj1 === obj2;}const keys = Object.keys(obj2);for (const key of keys) {// obj1 中没有 obj2 的某个属性 → 不匹配if (!(key in obj1)) {return false;}const val1 = obj1[key];const val2 = obj2[key];// 如果都是对象,递归检查if (isObject(val1) && isObject(val2)) {if (!isEqual(val1, val2)) {return false;}} else if (typeof val1 === 'function' && typeof val2 === 'function') {// 函数比较其字符串表示if (val1.toString() !== val2.toString()) {return false;}} else {// 其他类型直接比较值if (val1 !== val2) {return false;}}}return true;
}

记住上面的类要保存在一ts结尾的文件,而不是ets结尾的。因为ets为arkTS的文件,会限制一些语法。
在这里插入图片描述

使用

  if (isEqual(this.item.orderState, OrderState.needUse) || isEqual(this.item.orderState, OrderState.haveUse)) {}
http://www.dtcms.com/a/266900.html

相关文章:

  • react案例动态表单(受控组件)
  • React 渲染深度解密:从 JSX 到 DOM 的初次与重渲染全流程
  • 深入解析XFS文件系统:原理、工具与数据恢复实战
  • 【Go语言-Day 13】切片操作终极指南:append、copy与内存陷阱解析
  • 替代MT6701,3D 霍尔磁性角度传感器芯片
  • Go语言的协程池Ants
  • yolo性能评价指标(训练后生成文件解读)results、mAP、Precision、Recall、FPS、Confienc--笔记
  • 韩顺平之第九章综合练习-----------房屋出租管理系统
  • 从0写自己的操作系统(3)x86操作系统的中断和异常处理
  • 02每日简报20250704
  • Spring Boot + 本地部署大模型实现:安全性与可靠性保障
  • 高档宠物食品对宠物的健康益处有哪些?
  • MySQL/MariaDB数据库主从复制之基于二进制日志的方式
  • 如何查看自己电脑的显卡信息?
  • 力扣hot100题(1)
  • C++26 下一代C++标准
  • 通用人工智能三大方向系统梳理
  • 学习者的Python项目灵感
  • 【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据
  • [数据结构]详解红黑树
  • 小架构step系列04:springboot提供的依赖
  • mobaxterm终端sqlplus乱码问题解决
  • 使用循环抵消算法求解最小费用流问题
  • opencv的颜色通道问题 rgb bgr
  • 智绅科技:以科技为翼,构建养老安全守护网
  • Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
  • 八股学习(三)---MySQL
  • 高流量发布会,保障支付系统稳定运行感想
  • Flink-05学习 接上节,将FlinkJedisPoolConfig 从Kafka写入Redis
  • 关于python