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

【JavaScript】拷贝对象的几种方式与对比

#工作中拷贝对象是常有的事,我们需要分清楚深浅拷贝,一般来说要做的都是深拷贝,不然会有关联影响#

解构赋值

es6新语法,简洁是简洁,但是需要注意深拷贝只针对第一层

使用方式:{...obj}

let stu = {name: 'aaa',age: 18,info: {grade: 5,class: 4,},say: function() {console.log('hello');}
}let stu1 = {...stu};
stu1.info.grade = 2;

这里原对象的grade也会被更改

JSON.parse()和JSON.stringify()

let stu2 = JSON.parse(JSON.stringify(stu))
console.log(stu2) // { name: 'aaa', age: 18, info: { grade: 2, class: 4 } }

无法复制函数,因为函数不是JSON格式的一部分

递归复制

function deepCopy(obj) {// 处理原始类型和nullif (typeof obj !== 'object' || obj == null) return obj;// 如果是对象或数组,则创建新对象let newObj;if (Array.isArray(obj)) {newObj = [];} else {newObj = {};}// 遍历原始对象的所有属性,并对每个属性执行深拷贝for (let key in obj) {newObj[key] = deepCopy(obj[key]);}return newObj;
}
let stu3 = deepCopy(stu);

前面两种方式的缺陷都弥补了,但这么写实在是有点繁琐,而且其实还需要完善哈哈哈

lodash.cloneDeep

终极爸爸来了,借助工具

const lodash = require('lodash');let stu4 = lodash.cloneDeep(stu)

简洁的不能再简洁了,记得要先安装一下依赖噢~


http://www.mrgr.cn/news/47547.html

相关文章:

  • 实践体验密集小目标检测,以小麦麦穗颗粒为基准,基于YOLOv9全系列【yolov9/t/s/m/c/e】参数模型开发构建智能精准麦穗颗粒检测计数系统
  • 小猿口算APP脚本(协议版)
  • 毕设---中国移动网站平台管理系统的设计与实现
  • 结合大语言模型的机械臂抓取操作学习
  • 模版进阶 非类型模版参数
  • dayu_widgets-简介
  • [ARC154E] Reverse and Inversion
  • 【TypeScript】知识点梳理(三)
  • Internet Download Manager6.42免费版下载神器新体验
  • redis同步解决 缓存击穿+缓存穿透 原理代码实现
  • 深入理解Transformer的笔记记录(精简版本)---- Transformer
  • MyBatis 数据表与实体映射的隐藏陷阱
  • SAP_FI_表ACDOCA取代的表
  • Python测试框架--Allure
  • pytest框架之fixture测试夹具详解
  • 日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?
  • wenserver中 一些常见的 错误码
  • 网络编程(17)——asio多线程模型IOThreadPool
  • nn.Identity()
  • 猿人学 — 第1届第13题(解题思路附源码)