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

手机网站封装用户体验类似互推商盟的推广平台

手机网站封装用户体验,类似互推商盟的推广平台,怎么申请微信公众平台账号,武汉疫情场所递归深度拷贝情况一&#xff1a;基本数据类型&#xff0c;直接赋值情况二&#xff1a;复杂数据类型&#xff08;数组和对象&#xff09;先声明空容器&#xff0c;再递归调用遍历赋值情况三&#xff1a;正则表达式&#xff0c;日期对象等<!DOCTYPE html> <html lang&qu…

递归深度拷贝

情况一:基本数据类型,直接赋值

情况二:复杂数据类型(数组和对象)先声明空容器,再递归调用遍历赋值

情况三:正则表达式,日期对象等

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>深度拷贝示例</title>
</head>
<body><script>function deepCopy(target, source, map = new WeakMap()) {if (source === null) {return null;}if (typeof source !== 'object') {return source;}if (map.has(source)) {return map.get(source);}let clone;if (source instanceof Date) {clone = new Date(source.getTime());map.set(source, clone);return clone;}if (source instanceof RegExp) {clone = new RegExp(source);map.set(source, clone);return clone;}if (Array.isArray(source)) {clone = [];map.set(source, clone);source.forEach((item, index) => {clone[index] = deepCopy(null, item, map);});return clone;}clone = {};map.set(source, clone);Object.keys(source).forEach(key => {clone[key] = deepCopy(null, source[key], map);});return clone;}const original = {name: "张三",age: 30,isStudent: false,hobby: null,skills: ["JavaScript", "React", "Node.js"],contact: {phone: "13800138000",email: "zhangsan@example.com"},birthday: new Date("1990-01-01"),regex: /\d+/g,self: null};original.self = original;const clone = deepCopy(null, original);clone.age = 31;clone.skills.push("Vue");clone.contact.phone = "13900139000";clone.birthday.setFullYear(1991);console.log("原始对象:", original);console.log("克隆对象:", clone);console.log("克隆对象是否等于原始对象:", clone === original);console.log("克隆对象的self属性是否指向自身:", clone.self === clone);</script>
</body>
</html>

函数递归地复制对象及其嵌套属性,确保原始对象和克隆对象完全独立。它处理了多种数据类型和循环引用的情况。

function deepCopy(target, source, map = new WeakMap()) {// 处理 null 值if (source === null) {return null;}// 处理原始数据类型(非对象)if (typeof source !== 'object') {return source;}// 处理循环引用:如果已复制过该对象,直接返回之前的克隆if (map.has(source)) {return map.get(source);}let clone;// 处理日期对象if (source instanceof Date) {clone = new Date(source.getTime());map.set(source, clone);return clone;}// 处理正则表达式对象if (source instanceof RegExp) {clone = new RegExp(source);map.set(source, clone);return clone;}// 处理数组if (Array.isArray(source)) {clone = [];map.set(source, clone);source.forEach((item, index) => {clone[index] = deepCopy(null, item, map);});return clone;}// 处理普通对象clone = {};map.set(source, clone);Object.keys(source).forEach(key => {clone[key] = deepCopy(null, source[key], map);});return clone;
}

处理策略说明

  1. 原始值处理:直接返回原值,不进行复制。
  2. 对象类型处理
    • 日期对象:创建新的日期对象,使用相同的时间戳。
    • 正则表达式:创建新的正则对象,使用相同的模式和标志。
    • 数组:创建新数组,递归复制每个元素。
    • 普通对象:创建新对象,递归复制每个自有属性。
  3. 循环引用处理:使用 WeakMap 记录已处理的对象,避免无限递归。

测试对象 original

代码创建了一个包含多种数据类型的复杂对象,并设置了循环引用:

const original = {name: "张三",           // 字符串age: 30,               // 数字isStudent: false,      // 布尔值hobby: null,           // nullskills: ["JavaScript", "React", "Node.js"],  // 数组contact: {             // 嵌套对象phone: "13800138000",email: "zhangsan@example.com"},birthday: new Date("1990-01-01"),  // 日期对象regex: /\d+/g,                     // 正则表达式self: null                         // 用于循环引用
};
// 设置循环引用:self 属性指向对象自身
original.self = original;

深度拷贝测试

const clone = deepCopy(null, original);
// 修改克隆对象的属性
clone.age = 31;
clone.skills.push("Vue");
clone.contact.phone = "13900139000";
clone.birthday.setFullYear(1991);// 输出测试结果
console.log("原始对象:", original);
console.log("克隆对象:", clone);
console.log("克隆对象是否等于原始对象:", clone === original);
console.log("克隆对象的self属性是否指向自身:", clone.self === clone);

关键测试点

  1. 完全独立:修改克隆对象不会影响原始对象,反之亦然。
  2. 循环引用处理:克隆对象的 self 属性正确指向克隆对象自身,而非原始对象。
  3. 嵌套结构保持:所有嵌套对象都被递归复制,保持相同的结构。
http://www.dtcms.com/wzjs/267269.html

相关文章:

  • 网站优化方式有哪些种子搜索
  • 比较大的软件下载网站模板建站流程
  • 静态网站开发实训报告网络营销战略的内容
  • wordpress 文章截取官网优化包括什么内容
  • 外贸销售网站建设视频广告接单平台
  • 谷歌官方建站服务百度百家官网入口
  • 网站建设自建服务器徐州网页关键词优化
  • 专注湛江地区网站开发定制建设网络舆情监测平台
  • 免费做链接的网站吗中小型企业网站设计与开发
  • 免费建站建站app推广刷量
  • 苏州哪个公司做门户网站十堰seo优化方法
  • 万网网站建设的子分类能显示多少个百度公司电话热线电话
  • 网站建设空间什么意思公司产品推广方案
  • 郑州驾校网站建设网址大全浏览器下载
  • 中国招标建设信息网站怎么样建一个网站
  • 下载好模板该怎么做网站seo关键词布局
  • 做响应式网站是不是都用rem抖音推广平台联系方式
  • 太原网页设计培训学校秦洁婷seo博客
  • 合肥网站建设公司排名sem优化师
  • 帮客户做网站图片被告侵权百度刷排名seo软件
  • 曲靖做网站的公司每日关键词搜索排行
  • 一品威客网靠谱吗北京搜索引擎优化主管
  • 郓城网站建设苏州seo网络推广
  • 怎么做一种网站为别人宣传搜索引擎排名机制
  • 手机做网站价格广告公司营销策划方案
  • 宁波搭建网站公百度自然搜索排名优化
  • 集团公司门户网站建设360竞价推广开户多少钱
  • 静态企业网站模板推广方案100个
  • 课题网站建设培训简讯地推拉新app推广接单平台免费
  • 地方房产网站APP如何做西安百度百科