当前位置: 首页 > 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/519276.html

相关文章:

  • 食品科技学校网站模板seo搜索引擎优化期末及答案
  • 儿童摄影网站怎么做网站权重划分
  • 深圳制作网站有几家seo 的原理和作用
  • 有名的网站建设电话郴州网络推广公司排名
  • 域名如何解析别人网站如何推广一个品牌
  • 幼儿园网站设计与实现网络推广公司运营
  • 怎么用服务器lp做网站百度seo关键词优化排行
  • 做网站技术人员赣州seo顾问
  • 美国互联网公司排名网站在线优化工具
  • 各类网站推广品牌推广案例
  • 常州建网站公司如何免费发布广告
  • 包头教育云平台网站建设百度中心
  • 在线制作动画的网站百度外推排名代做
  • 网站建设分析行业关键词分类
  • 深圳推广公司网站建设书模板最常见企业网站有哪些
  • 怎么备份网站模板短网址生成器免费
  • 在自己电脑上做网站最新疫情最新数据
  • 做网站 使用权 所有权网站运营方案
  • 用哪个做网站demo郑州疫情最新动态
  • 河南股票配资网站建设福州seo建站
  • 优惠劵精选网站怎么做广州营销优化
  • 网站开发论文开题报告范文广州网站定制多少钱
  • 网站建设属于无形资产有创意的网络营销案例
  • 网上翻译网站做译员品牌推广方式有哪些
  • 宿州城市建设投资网站网站做优化一开始怎么做
  • 网站主页怎么做天天网站
  • 网站建设华科技百度榜
  • 平江做网站的公司免费行情软件app网站下载大全
  • 四个免费h5网站山东16市最新疫情
  • 做动漫网站侵权吗网站代搭建维护