首页 > 其他分享 >手写深拷贝

手写深拷贝

时间:2024-06-06 15:58:00浏览次数:7  
标签:instanceof return cache else result new 手写 拷贝

  • JSON
    不支持日期、正则、undefined、函数,环结构
JSON.parse(JSON.stringify(obj))
  • JS 深拷贝 (递归、判断类型、避免环)
const cloneDeep = (a, cache) => {
  if (!cache) {
    cache = new Map(); // 避免全局变量,仅第一次拷贝创建
  }
  if (cache.get(a)) { // 避免环
    return cache.get(a)
  }
  if (a instanceof Object) { // 不考虑 iframe
    let result = undefined;
    if (a instanceof Function) {
      if (a.prototype) { // a 存在 prototype,代表 a 是普通函数
        result = function () {
          return a.apply(this, arguments)
        }
      } else {
        result = (...args) => a.call(undefined, ...args);
      }
    }
    else if (a instanceof Array) {
      result = []
    }
    else if (a instanceof Date) {
      result = new Date(a - 0)
    }
    else if (a instanceof RegExp) {
      result = new RegExp(a.source, a.flags)
    } else {
      result = {}
    }
    cache.set(a, result)
    for (let k in a) {
      if (a.hasOwnProperty(k)) { // 仅遍历自身属性
        result[k] = cloneDeep(a[k], cache)
      }
    }
    return result
  } else {
    return a
  }
}


const a = {
  name: 'xm',
  say: function () {
    console.log('say');
  },
  hi: () => console.log('hi'),
  bir: new Date(),
  reg: /123/,
  family: ['xh', 'xg']
}

a.self = a

const b = cloneDeep(a)

标签:instanceof,return,cache,else,result,new,手写,拷贝
From: https://www.cnblogs.com/codejnp/p/18235270

相关文章

  • “深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
        前言:在Java编程中,深拷贝(DeepCopy)与浅拷贝(ShallowCopy)是两个非常重要的概念。它们涉及到对象在内存中的复制方式,对于理解对象的引用、内存管理以及数据安全都至关重要。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-C......
  • 『手撕Vue-CLI』拷贝模板
    开篇经过上篇文章的介绍,实现了可以根据用户选择的模板名称加上对应的版本号,可以下载对应的模板,并且将下载之后的文件存放在用户目录下的.nue-template文件夹中。接下来这篇文章主要实现内容是将下载的模板文件拷贝到当前所执行命令的目录下。拷贝模板例如我现在在终端当中输......
  • 实验16-使用GAN生成手写数字样本
    from__future__importprint_function,divisionfromkeras.datasetsimportmnistfromkeras.layersimportInput,Dense,Reshape,Flatten,Dropoutfromkeras.layersimportBatchNormalization,Activation,ZeroPadding2Dfromkeras.layers.advanced_activation......
  • 实验14-使用cnn完成MNIST手写体识别
    实验14-1使用cnn完成MNIST手写体识别(tf).pyimporttensorflowastf#Tensorflow提供了一个类来处理MNIST数据fromtensorflow.examples.tutorials.mnistimportinput_dataimporttime#载入数据集mnist=input_data.read_data_sets('MNIST',one_hot=True)#设置批次......
  • Postman 拷贝 curl 不识别 --data-raw
    postman:请求路径:   拷贝出来的curl:curl--location--requestPOST'http://xxxxxxxxxxxxx/xxx/xxx'\--header'Content-Type:application/json'\--data-raw'{"query":{"bool":{"must":[......
  • 从零手写实现 nginx-03-nginx 基于 Netty 实现
    前言大家好,我是老马。很高兴遇到你。我们希望实现最简单的http服务信息,可以处理静态文件。如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicatnetty相关如果你对netty不是很熟悉,可以读一下Netty权威指南-01-BIO案例Netty......
  • 从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
    前言大家好,我是老马。很高兴遇到你。作为一个java开发者,工作中一直在使用nginx。却发现一直停留在使用层面,无法深入理解。有一天我在想,为什么不能有一个java版本的nginx呢?一者是理解nginx的设计灵魂,再者java开发者用java语言的服务器不是更加自然吗。于是动手开......
  • 利用 word VBA 将投标文件偏离参数表列数据拷贝至技术偏差表中
    使用vba将正偏离参数表的第一列信息复制粘贴至对应的技术偏离表的第4列中。需要同时打开两个word文件,在技术偏差表中打开VBE(可以用ctrl+f11快捷键),插入模块。忽略格式的方式,SubCopyDataToTable()Windows("正偏离参数表.docx").ActivateFori=1ToActiveDoc......
  • 一起学大模型 - 动手写一写langchain调用本地大模型(2)
    文章目录前言一、自动选择1.使用AutoTokenizer和AutoModel的示例2.解释二、怎么实现自动选择的呢总结前言前一篇文章里,fromtransformersimportGPT2LMHeadModel,GPT2Tokenizer如果模型替换了,就得更改代码,很麻烦,那有没有更简单的方法呢?一、自动选择trans......
  • 【C++修行之道】类和对象(三)拷贝构造函数
    目录一、 概念二、特征 正确的拷贝构造函数写法:拷贝函数的另一种写法 三、若未显式定义,编译器会生成默认的拷贝构造函数。四、编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝了,还需要自己显式实现吗?深拷贝的写法:五、拷贝构造函数典型调用场景:六、总结:......