首页 > 其他分享 >js实现深拷贝

js实现深拷贝

时间:2023-11-11 10:11:54浏览次数:32  
标签:return 实现 cloneObj js new obj 拷贝 hash

function deepClone(obj, hash = new WeakMap()) {
  if (obj === null) return obj // 如果是null或者undefined我就不进行拷贝操作
  if (obj instanceof Date) return new Date(obj)
  if (obj instanceof RegExp) return new RegExp(obj)
  // 可能是对象或者普通的值  如果是函数的话是不需要深拷贝
  if (typeof obj !== "object") return obj
  // 是对象的话就要进行深拷贝
  if (hash.get(obj)) return hash.get(obj)
  let cloneObj = new obj.constructor()
  // 找到的是所属类原型上的constructor,而原型上的 constructor指向的是当前类本身
  hash.set(obj, cloneObj)
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 实现一个递归拷贝
      cloneObj[key] = deepClone(obj[key], hash)
    }
  }
  return cloneObj
}

标签:return,实现,cloneObj,js,new,obj,拷贝,hash
From: https://www.cnblogs.com/shuhan-hou/p/17825568.html

相关文章

  • Js选择器总结
    Js选择器总结 一、原生JS选择器#JS选择器常用的有getElementById()、getElementsByName()、getElementsByTagName()、getElementsByClassName()、querySelector()、querySelectorAll()A:getElementById(ID):返回对指定ID的第一个对象的引用,如果在文档中查找一个特定的元......
  • VS Code搭建Node.js环境
    VSCode搭建Node.js环境VSCode集成了方便的Node.js插件,使您可以轻松安装和配置Node.js环境。您可以采用以下步骤来搭建Node.js环境。1.安装VSCode在VSCode官网上下载并安装VSCode2.安装Node.js插件在VSCode插件市场中搜索并安装“Node.js”扩展3.配置Node.js路径单......
  • 23.11.10(Ajax和Json的数据传输问题)
    使用Ajax写查询功能,后端数据一直传不到前端,遇到parse解析的卡住原因:传来的json数据格式不正确,后端Java还respond了一个success解决方法:把success去掉<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script><script>$(d......
  • vue中执行npm install提示:npm WARN deprecated [email protected]
    场景:在执行npminstall时提示[email protected],导致安装不了 提示的意思是:版本低不再维护了,让升级upgradeyourdependenciestotheactualversionofcore-js.   [email protected]:core-js@<3.23.3isnolongermaintainedand......
  • JMeter进阶使用变量及BeanShell 预处理程序实现复杂调试
    JMeter进阶使用变量及BeanShell预处理程序实现复杂调试有一些测试需要做一些预处理程序才能做http请求,在JMeter下可以通过使用参数+BeanShell预处理程序加工后再发起请求即可。例oauth服务需要通过username,password,client_id,client_secret,grant_type进行请求,这里的密码涉及安......
  • 前端如何实现ping的工具呢?
    react中很想做一个类似cmd上的ping的功能:nono@MacBook-AirDownloads%ping8.8.8.8PING8.8.8.8(8.8.8.8):56databytes64bytesfrom8.8.8.8:icmp_seq=0ttl=54time=78.295ms64bytesfrom8.8.8.8:icmp_seq=1ttl=54time=76.225ms64bytesfrom8.8.8.8:icmp_se......
  • AI要想获得意思需要具备那些条件,如何才能实现意识获取?
    实现人工智能(AI)的意识是一个复杂而深刻的问题,目前在科学和技术上还没有达到清晰的共识。意识是一个多层次的概念,包括对自我和外部世界的主观体验、情感、理解和自我意识等方面。在目前的技术水平下,实现AI的真正意识仍然是一个巨大的挑战。感知和理解能力: AI需要具备先进的感知......
  • 《信息安全系统设计与实现》学习笔记9
    《信息安全系统设计与实现》学习笔记9第六章信号和信号处理信号和中断广义的“进程”从事日常事务的人在用户模式或内核模式下运行的Unix/Linux进程执行机器指令的CPU“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理”......
  • ai技术是怎么换脸的,实现原理是什么,有那些软件
    人工智能(AI)在近年来的迅猛发展中,带来了许多令人惊叹的技术创新,其中之一就是人工智能换脸技术。这项技术通过深度学习和图像处理的手段,使得用户可以将自己的面孔替换成其他人物,引发了广泛的讨论和应用。本文将深入探讨人工智能换脸技术的实现原理、相关软件以及伦理考量。1.人工......
  • 为什么AI技术不能获得意识,技术难点在那里,如何才能实现
    人工智能(AI)领域取得了巨大的进步,但在追求赋予机器意识方面,科学家们仍然面临着重重难题。虽然我们的计算机系统能够执行复杂的任务,但它们缺乏真正的主观体验和自我意识。这一挑战的本质在于理解和模拟人类思维的奥秘,以及如何将这种思维嵌入到机器中。本文将探讨为什么AI技术尚未获......