新闻中心

对象合并与拷贝方法_浅拷贝与深拷贝实现

2025-11-14
浏览次数:
返回列表
答案是浅拷贝仅复制对象第一层属性,深拷贝递归复制所有层级。常用浅拷贝方法有Object.assign()和扩展运算符;深拷贝可使用JSON.parse(JSON.stringify())或递归实现,以避免引用共享导致的数据污染。

对象合并与拷贝方法_浅拷贝与深拷贝实现

在J*aScript中,对象的合并与拷贝是开发中常见的操作。由于对象是引用类型,直接赋值只会复制引用,修改新对象会影响原对象。因此需要通过浅拷贝或深拷贝来实现数据隔离。

浅拷贝实现方式

浅拷贝只复制对象的第一层属性,如果属性值是对象,则复制的是引用。

常用方法包括:
  • Object.assign():将多个源对象的可枚举属性复制到目标对象
  • 扩展运算符(...):语法简洁,适合单层对象合并
  • Array.prototype.slice():适用于数组的浅拷贝

示例:

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = Object.assign({}, obj1);
// 或 const obj2 = { ...obj1 };

obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,说明内部对象被共享

深拷贝实现方式

深拷贝会递归复制对象的所有层级,完全断开引用关系。

常见实现方法:
  • JSON.parse(JSON.stringify()):简单有效,但有局限性(如无法处理函数、undefined、循环引用等)
  • 递归遍历实现:手动判断类型并递归复制,灵活性高
  • 使用第三方库(如 Lodash):提供成熟的 _.cloneDeep() 方法

基础递归深拷贝实现:

Visla Visla

AI视频生成器,快速轻松地将您的想法转化为视觉上令人惊叹的视频。

Visla 100 查看详情 Visla
function deepClone(obj, visited = new WeakMap()) {
  if (obj === null || typeof obj !== 'object') return obj;
  if (visited.has(obj)) return visited.get(obj); // 处理循环引用

  let clone;
  if (Array.isArray(obj)) {
    clone = [];
  } else {
    clone = {};
  }

  visited.set(obj, clone);

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key], visited);
    }
  }
  return clone;
}

对象合并操作

对象合并常用于配置项覆盖、状态更新等场景。

  • 使用 Object.assign(){...obj1, ...obj2} 实现浅层合并
  • 若需深层合并,需自定义逻辑或使用工具函数

示例:

const defaults = { timeout: 5000, retry: 3 };
const options = { timeout: 2000 };
const config = { ...defaults, ...options }; // { timeout: 2000, retry: 3 }

基本上就这些。理解浅拷贝与深拷贝的区别,能帮助我们避免意外的数据污染。选择合适的方法取决于具体需求,比如性能要求、数据结构复杂度等。

以上就是对象合并与拷贝方法_浅拷贝与深拷贝实现的详细内容,更多请关注其它相关文章!


# 的是  # 丰县网站推广方法  # 太仓seo优化找哪家  # 百度谷歌网站搜索优化  # 朝阳网络营销推广费用  # seo工作量排行  # 怎么给机械网站推广  # 天门便宜的网站推广公司排名  # 运城营销网络推广联系人  # 洛宁网站优化选哪家  # 食品关键词排名  # 二进制数  # 内存管理  # 您的  # 对象拷贝  # 第一层  # 如何使用  # 运算符  # 数据结构  # 并与  # 递归  # 区别  # 工具  # json  # js  # java  # javascript  # 浅拷贝深拷贝 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: ArrayList与LinkedList核心操作的Big-O复杂度分析  Python异步编程实践:使用Binance API构建实时交易数据流  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  J*aScript中赋值与自增运算符的复杂交互与执行机制  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  提升Kafka消费者健壮性:会话超时处理与消息处理语义  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  2026春节假期时间安排 2026春节假日查询  快手极速版在线观看 官方网页版登录地址  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  MongoDB聚合管道:正确匹配对象数组中_id的方法  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  深入理解与实现最大堆的Heapify过程:常见错误与修正  京东单号查询入口_京东快递订单追踪入口  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  AO3最新镜像入口 Archive of Our Own官方平台访问  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  抖音创作助手登录入口_抖音创作辅助工具官网直达  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  msn官网入口地址手机版 msn官方网站手机最新链接  在WordPress中通过REST API获取BasicAuth保护的远程文章  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  12306选座系统怎么选连座_12306选座多人连坐操作方法  解决Django多数据库/多Schema环境下外键迁移问题  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  b站赚钱渠道_b站收益来源  最新韩小圈网页版登录入口_官网在线观看官方链接  顺丰快递查单号物流信息 顺丰快递小程序查询入口  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  Log4j Console Appender性能瓶颈与高并发优化策略  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  EMS快递官网app_中国邮政速递物流手机客户端  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  邮政快递包裹最新位置 邮政快递实时追踪入口 

搜索