鸿蒙三方库 | harmony-utils之ObjectUtil对象拷贝与合并详解 前言对象拷贝和合并是开发中的常见操作深拷贝避免引用共享对象合并实现配置叠加。pura/harmony-utils的ObjectUtil封装了对象拷贝和合并方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、ObjectUtil拷贝合并核心APIObjectUtil提供了以下拷贝合并方法方法说明返回类型使用场景deepClone(obj)深拷贝T避免引用共享shallowClone(obj)浅拷贝T浅层复制merge(target, ...sources)合并对象Object配置叠加isEmpty(obj)对象是否为空boolean空值判断isEqual(obj1, obj2)对象是否相等boolean值比较1.1 核心特性简洁易用封装复杂逻辑为一行调用降低使用门槛类型安全完整的TypeScript类型定义编译期即可发现错误异常处理内置异常捕获机制避免运行时崩溃深拷贝递归拷贝所有层级避免引用共享1.2 深拷贝与浅拷贝对比特性深拷贝浅拷贝嵌套对象独立副本共享引用性能较慢较快修改影响互不影响嵌套对象互相影响适用场景数据隔离简单复制二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 深拷贝import{ObjectUtil}frompura/harmony-utils;Button(深拷贝).width(100%).onClick((){try{letoriginal{name:张三,scores:[90,85,92]};letclonedObjectUtil.deepClone(original);cloned.scores[0]100;this.result原对象scores[0]:${original.scores[0]}\n拷贝scores[0]:${cloned.scores[0]}\n✅ 深拷贝互不影响;}catch(e){this.result异常: e;}})2.3 对象合并Button(对象合并).width(100%).onClick((){try{letdefaults{theme:light,fontSize:14,lang:zh};letuser{theme:dark,fontSize:16};letmergedObjectUtil.merge(defaults,user);this.result默认:${JSON.stringify(defaults)}\n用户:${JSON.stringify(user)}\n合并:${JSON.stringify(merged)};}catch(e){this.result异常: e;}})三、完整页面示例import{ObjectUtil}frompura/harmony-utils;EntryComponentstruct CloneDemo{Stateresult:string;build(){Column({space:12}){Button(深拷贝).width(100%).onClick((){letobj{name:张三,scores:[90,85]};letcloneObjectUtil.deepClone(obj);clone.scores[0]100;this.result原:${obj.scores[0]}, 拷贝:${clone.scores[0]};});Button(对象合并).width(100%).onClick((){leta{x:1,y:2};letb{y:3,z:4};this.resultJSON.stringify(ObjectUtil.merge(a,b));});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 配置管理import{ObjectUtil}frompura/harmony-utils;constDEFAULT_CONFIG{theme:light,fontSize:14,language:zh-CN,notifications:true,};functionloadConfig(userConfig:PartialtypeofDEFAULT_CONFIG):typeofDEFAULT_CONFIG{returnObjectUtil.deepClone(ObjectUtil.merge(DEFAULT_CONFIG,userConfig));}4.2 表单数据重置functionresetForm(original:FormData):FormData{returnObjectUtil.deepClone(original);}五、注意事项循环引用深拷贝包含循环引用的对象可能栈溢出特殊对象Date、RegExp等特殊对象的深拷贝行为需注意函数属性函数通常不会被深拷贝初始化依赖使用前需确保AppUtil.init()已调用性能考虑大对象深拷贝可能较慢六、常见问题Q1: 深拷贝对Date对象有效吗取决于实现部分深拷贝会将Date转为字符串。Q2: merge是深合并还是浅合并取决于实现通常第一层是深合并嵌套层可能只替换。Q3: isEqual对数组有效吗有效isEqual会递归比较数组的每个元素。Q4: deepClone对Map和Set有效吗标准JSON深拷贝不支持Map/Set需要特殊处理。总结ObjectUtil的拷贝和合并方法为对象操作提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法实现数据隔离、配置管理等功能。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。