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

吉林省建设厅网站评职称系统手机装wordpress

吉林省建设厅网站评职称系统,手机装wordpress,广州头条新闻最近一周,长沙seo优化推荐如何深拷贝一个对象或数组 啥是深拷贝 深拷贝就像是给一个东西(对象或者数组)做了个完全一样的“克隆体”。这个“克隆体”和原来的东西没有任何关联,你对“克隆体”做任何修改,都不会影响到原来的东西,反过来也一样…

如何深拷贝一个对象或数组

啥是深拷贝

深拷贝就像是给一个东西(对象或者数组)做了个完全一样的“克隆体”。这个“克隆体”和原来的东西没有任何关联,你对“克隆体”做任何修改,都不会影响到原来的东西,反过来也一样。

简单方法:JSON.parse(JSON.stringify())

这是一种比较简单的深拷贝方法。可以把它想象成,先把要拷贝的对象或者数组“翻译”成 JSON 格式的字符串,这个字符串就像是一个“蓝图”,然后再根据这个“蓝图”重新构建一个新的对象或者数组。

代码示例

// 定义一个对象
const originalObj = {name: '张三',age: 25,hobbies: ['篮球', '阅读']
};// 使用 JSON.parse(JSON.stringify()) 进行深拷贝
const clonedObj = JSON.parse(JSON.stringify(originalObj));// 修改克隆对象的属性
clonedObj.name = '李四';
clonedObj.hobbies.push('游泳');console.log(originalObj); 
// 输出: { name: '张三', age: 25, hobbies: [ '篮球', '阅读' ] }
console.log(clonedObj); 
// 输出: { name: '李四', age: 25, hobbies: [ '篮球', '阅读', '游泳' ] }

从上面的代码可以看到,修改克隆对象的属性,原来的对象并没有受到影响。

手动实现深拷贝(递归方法)

手动实现深拷贝就是自己写代码来创建“克隆体”。对于对象和数组,需要递归地处理它们的每一个属性或者元素。

代码示例

function deepClone(target) {// 如果目标不是对象或者数组,直接返回if (typeof target!== 'object' || target === null) {return target;}let clone;// 判断是数组还是对象if (Array.isArray(target)) {clone = [];// 遍历数组元素for (let i = 0; i < target.length; i++) {// 递归调用深拷贝函数clone[i] = deepClone(target[i]);}} else {clone = {};// 遍历对象属性for (let key in target) {if (target.hasOwnProperty(key)) {// 递归调用深拷贝函数clone[key] = deepClone(target[key]);}}}return clone;
}// 定义一个对象
const original = {name: '王五',info: {address: '北京'}
};// 使用自定义深拷贝函数
const cloned = deepClone(original);// 修改克隆对象的属性
cloned.info.address = '上海';console.log(original); 
// 输出: { name: '王五', info: { address: '北京' } }
console.log(cloned); 
// 输出: { name: '王五', info: { address: '上海' } }

这个自定义的 deepClone 函数会检查目标是对象还是数组,然后递归地处理每一个属性或者元素,确保“克隆体”和原来的东西完全独立。

JSON.parse(JSON.stringify()) 方法的局限性

1. 无法处理函数和正则表达式

JSON.stringify() 会忽略对象中的函数和正则表达式,因为 JSON 格式不支持这些类型。这就好比在画“蓝图”的时候,把函数和正则表达式这些“特殊零件”给漏掉了。

代码示例

const obj = {name: '赵六',sayHello: function() {console.log('你好');},reg: /abc/
};const clonedObj = JSON.parse(JSON.stringify(obj));console.log(clonedObj); 
// 输出: { name: '赵六' }

可以看到,sayHello 函数和 reg 正则表达式都没有被拷贝。

2. 无法处理 undefinedSymbol 类型

JSON.stringify() 会忽略对象中的 undefinedSymbol 类型的属性。这就像在“蓝图”里把这些类型的属性当成不存在一样。

代码示例

const obj = {name: '孙七',age: undefined,[Symbol('key')]: 'value'
};const clonedObj = JSON.parse(JSON.stringify(obj));console.log(clonedObj); 
// 输出: { name: '孙七' }

age 属性和 Symbol 类型的属性都没有被拷贝。

3. 无法处理循环引用

循环引用就是对象的属性指向了对象本身或者形成了一个循环的引用关系。JSON.stringify() 遇到循环引用会报错,就像“蓝图”画到一半发现陷入了一个死循环,不知道该怎么画下去了。

代码示例

const obj = {};
obj.self = obj;try {const clonedObj = JSON.parse(JSON.stringify(obj));
} catch (error) {console.log(error); // 输出: TypeError: Converting circular structure to JSON
}

这里 objself 属性指向了 obj 本身,JSON.stringify() 处理时就会报错。

http://www.dtcms.com/a/453213.html

相关文章:

  • LeetCode 分类刷题:1901. 寻找峰值 II
  • ROS实战中Gazebo的基本使用
  • wordpress网站维护教程wordpress修改管理密码
  • PTA6-1 使用函数求最大公约数(C)
  • 小谈:数字化项目立项成功的方法论
  • HTTPS 真的牢不可破吗?—— 中间人攻击与安全机制解析
  • 广东省城乡建设厅网站seo短视频新地址在哪里?
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 9--基础知识 5--常用函数 3
  • 然后在亚马逊网站上做外贸做网站需要做数据库
  • 接口测试-Postman 断言
  • 网站关键词更换了专业网站建设 公司哪家好
  • 乐观锁 与 悲观锁 笔记251007
  • Linux中select的实现
  • /UI2/CL_JSON=>DESERIALIZE :JSON反序列化
  • MySQL主主复制+Keepalived高可用集群搭建与故障切换实战
  • 幼儿网站源代码室内设计案例去什么网站
  • Spring Framework源码解析——BeanFactoryAware
  • Linux系统--进程通信初解
  • 企业网站如何建设报告jsp简述网站开发流程
  • VS2022创建项目工程笔记
  • 【学习笔记05】C++11新特性学习总结(下)
  • RNN、LSTM与GRU模型
  • 基于华为云IOT设计的粮仓环境监测系统_303
  • 天津做网站企业保险公司网站策划
  • Linux-> TCP 编程2
  • 视频批量混剪、批量拼接,维多快剪-批量创作插件使用说明
  • JAVA算法练习题day30
  • 网站怎么做平台长沙官网制作
  • 做网站分前台后端吗怎样做一个网站平台
  • C++:异常处理与智能指针实战指南