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

爱站工具包官网下载企业网络搭建方案

爱站工具包官网下载,企业网络搭建方案,wordpress主题熊掌号,绝对大气漂亮的响应式网站后台模板js 对象深拷贝 今天遇到一个bug ,子组件页面修改了内容,但是按了取消保存按钮,没有将数据传回父组件的,但是父组件的数据改了,原因是通过子组件接受父组件的参数对象层级深没有做深拷贝的原因。 在 JavaScript 中&…

js 对象深拷贝


今天遇到一个bug ,子组件页面修改了内容,但是按了取消保存按钮,没有将数据传回父组件的,但是父组件的数据改了,原因是通过子组件接受父组件的参数对象层级深没有做深拷贝的原因。

在 JavaScript 中,深拷贝是指复制一个对象及其所有嵌套对象的完整副本,而不是仅仅复制引用。以下是几种实现深拷贝的方法:

方法 1:使用 JSON.parseJSON.stringify

这是最简单的方法,但有一些限制(例如,无法拷贝函数、undefinedSymbol 等)。

const obj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(obj));console.log(deepCopy); // { a: 1, b: { c: 2 } }

注意

  • 无法拷贝函数、undefinedSymbol
  • 不支持循环引用。

方法 2:使用递归实现深拷贝

手动实现一个递归函数来处理对象和数组。

function deepClone(obj) {if (obj === null || typeof obj !== "object") {return obj; // 基本类型直接返回}// 创建一个新对象或数组const copy = Array.isArray(obj) ? [] : {};for (const key in obj) {if (obj.hasOwnProperty(key)) {copy[key] = deepClone(obj[key]); // 递归拷贝}}return copy;
}const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = deepClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

方法 3:使用 lodash

lodash 是一个流行的 JavaScript 工具库,其中的 cloneDeep 方法可以轻松实现深拷贝。

import _ from "lodash";const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = _.cloneDeep(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

优点

  • 支持复杂对象(如循环引用)。
  • 可靠且易用。

方法 4:使用 structuredClone(现代浏览器支持)

structuredClone 是一种原生方法,用于深拷贝对象。

const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = structuredClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

优点

  • 支持循环引用。
  • 原生方法,性能较好。

注意

  • 仅在现代浏览器和 Node.js 17+ 中支持。

方法 5:使用 Object.create 和递归

通过 Object.create 创建新对象,并递归拷贝属性。

function deepClone(obj) {if (obj === null || typeof obj !== "object") {return obj;}const copy = Object.create(Object.getPrototypeOf(obj));for (const key of Object.keys(obj)) {copy[key] = deepClone(obj[key]);}return copy;
}const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = deepClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

总结

  • 简单对象:可以使用 JSON.parse(JSON.stringify(obj)
  • 复杂对象:推荐使用 lodash.cloneDeepstructuredClone
  • 自定义实现:可以使用递归函数处理特殊需求。
http://www.dtcms.com/wzjs/321215.html

相关文章:

  • 医疗软件网站建设公司网络关键词
  • 如何做网站的流量分析营销策划是做什么
  • 做网站ps的素材seo技术培训江门
  • 怎么建设商业网站营销战略有哪些内容
  • wordpress生成标签页百度seo最成功的优化
  • 无忧网站建设价格活动营销方案
  • 佛山专业的网站制作我想做app推广代理
  • 企业信息化建设如何帮助客户理解网站流量网站怎么优化关键词
  • 自建网站外贸建站公司
  • 佛山狮山网站建设申请友情链接
  • 十大app开发公司合肥网站优化公司
  • 交互设计师和ui设计师的区别google seo是什么啊
  • 2015做那些网站能致富想做电商应该怎么入门
  • c语言入门自学浙江seo公司
  • wordpress并发测试品牌词优化
  • 专做温州鞋批发的网站百度网页入口官网
  • 安阳做网站优化竞价推广平台
  • 分析电子商务网站建设需求教案今日财经最新消息
  • 山西大同企业做网站百度搜索推广流程
  • 批发网站建设升华网络推广软件
  • 临朐网站建设北京网站优化站优化
  • 做网站都有哪些软件新产品推广方案范文
  • 哪个网站可以做司考题谷歌关键词搜索量数据查询
  • 专业网站建设网站价格企业培训有哪些方面
  • 上海市网站百度一下搜索引擎大全
  • 网做英文网站宁波seo快速优化平台
  • 怎么用阿帕奇做网站奶茶网络营销策划方案
  • 织梦网站如何做地区分站友情链接发布网
  • 吉林省住房和城乡建设部网站营销计划
  • wordpress 免费cdnseo外链怎么发