鸿蒙三方库 | harmony-utils之ObjectUtil对象拷贝与合并详解
📅 2026/7/28 20:55:47
👁️ 次浏览
前言对象拷贝和合并是开发中的常见操作深拷贝避免引用共享对象合并实现配置叠加。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工具库更多功能请参考官方文档与后续系列文章。
1. 项目概述医院挂号管理系统是医疗信息化建设中的核心应用之一。这个基于SpringBootVue技术栈实现的系统,旨在解决传统医院挂号流程中的三大痛点:窗口排队时间长、号源分配不透明、就诊信息不互通。我在实际开发中发现,一个设计良好的挂号系…
📅 2026/7/28 20:54:47
这次我们来看一个面向初学者的神经网络原理与实战速成内容。标题虽然带有“10分钟动画讲解”的营销感,但其核心价值在于将GNN、RNN、GAN、CNN、Transformer这五大主流神经网络架构的原理与实战进行系统性串联。对于刚入门AI、被各种缩写搞晕的开发者来说,这种对比学习能快速建…
📅 2026/7/28 20:54:47
这次我们来看一个 Linux 系统管理员和开发者必须掌握的核心工具:tar命令。它远不止是“打包压缩”那么简单,而是文件归档、备份、迁移和分发的基石。无论你是要备份网站目录、分发软件源码,还是将日志文件归档到远程服务器,tar都是…
📅 2026/7/28 20:54:47
做生信分析最怕什么?就是对着满屏的P值发呆,却不知道怎么筛选出靠谱的基因。这篇内容直接告诉你,如何用GEO2R归一化处理避开那些坑,让你从杂乱的数据里捞出真正有意义的差异基因,不再为无效结果浪费生命。记得刚接触GEO数据库那会儿,我像个无头苍蝇。看到GSE编号就兴奋,…
📅 2026/7/29 1:12:51
抖音下载终极解决方案:douyin-downloader完整使用指南,三步实现无水印高清视频批量保存 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite…
📅 2026/7/29 1:13:27
WarcraftHelper技术实现方案:现代系统下经典游戏兼容性架构解析 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper
WarcraftHelper是一个针对…
📅 2026/7/29 1:13:27
更多请点击:
https://codechina.net
第一章:AI工作流性能瓶颈诊断手册:基于172个真实生产案例的响应延迟根因分析矩阵 在大规模AI工作流部署中,端到端响应延迟超标(P95 > 2.8s)是最高频的SLO违规现象。…
📅 2026/7/29 1:13:27
更多请点击:
https://codechina.net
第一章:为什么92%的AI客服质检系统漏检关键投诉? 当前主流AI客服质检系统普遍依赖关键词匹配与浅层语义模型,却在真实对话场景中严重低估了投诉表达的隐晦性、语境依赖性与情绪迁移特征。一项…
📅 2026/7/29 1:13:27
AI编程工具正在改变开发流程。以前,开发者需要自己完成:查找问题位置;编写代码;调试错误;补充测试。现在,ChatGPT可以帮助分析需求,Codex可以进入代码仓库修改文件,并运行相关测试。…
📅 2026/7/29 1:12:26
解密Seq的核心功能:如何利用Pipeline实现高效基因组数据处理 【免费下载链接】seq A high-performance, Pythonic language for bioinformatics 项目地址: https://gitcode.com/gh_mirrors/se/seq
Seq作为一款高性能的生物信息学专用语言,其Pipel…
📅 2026/7/29 0:00:00
Flask-Blogging插件开发指南:打造属于你的个性化博客功能 【免费下载链接】Flask-Blogging A Markdown Based Python Blog Engine as a Flask Extension. 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-Blogging
Flask-Blogging是一个基于Markdown的Py…
📅 2026/7/29 0:00:00
近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…
📅 2026/7/29 0:01:00
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/28 1:13:29
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/28 1:13:29
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/28 1:13:29
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/28 7:13:45
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/28 17:14:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/28 5:13:40