返回介绍

实现深拷贝

发布于 2024-09-07 20:34:43 字数 727 浏览 0 评论 0 收藏 0

在拷贝的时候判断一下属性值的类型,如果是对象,递归调用深拷贝函数

/**
 * 在拷贝的时候判断一下属性值的类型,如果是对象,递归调用深拷贝函数
 */

function deepClone(obj, cache=new Map()) {
  // 基本数据类型直接返回
  if(typeof obj !== 'object' || obj === null) return obj
  // 防止循环引用
  const cacheTarget = cache.get(obj)
  // 已经存在就直接返回
  if(cacheTarget) return cacheTarget

  let newObj = obj instanceof Array ? [] : {} // 新建一个对象

  cache.set(obj, newObj)
  // 遍历原对象
  for(let key in obj) {
    if(obj.hasOwnProperty(key)) {
      newObj[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
    }
  }
  return newObj
}
const obj = {
  name: '南玖'
}
const obj1 = obj
const obj2 = deepClone(obj)
console.log(obj1===obj) //true
console.log(obj2===obj) //false

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文