美文网首页
手写深拷贝deepClone

手写深拷贝deepClone

作者: 靴唯白 | 来源:发表于2024-02-28 13:15 被阅读0次

解题思路

  • 首先判断传进来的 obj类型 是否是object,不是直接原样返回 obj
  • 声明一个拷贝对象并且根据是否是数组赋值
  • 遍历旧对象 obj
  • 判断旧对象obj[key]是否是object, 如果是 则进行递归拷贝同时赋值给 拷贝对象 cyObj[key],反之直接赋值
  • 最后递归完毕以后直接返回 拷贝对象 cyObj
  • 最后的最后就是对应验证输出
      let carProp = {
        name: "summer",
        carObj: {
          color: "red",
          size: "large",
        },
        cars: ["小卡车", "大卡车"],
      };
      function deepClone(obj) {
        // 首先判断传进来的 obj类型 是否是object,不是直接原样返回 obj
        if (typeof obj !== "object") return obj
        // 声明一个拷贝对象并且根据是否是数组赋值
        let cyObj = Array.isArray(obj) ? [] : {};
        // 遍历旧对象 obj
        for (let key in obj) {
          // 判断旧对象obj[key]是否是object, 如果是 则进行递归拷贝同时赋值给 拷贝对象 cyObj[key],反之直接赋值
          if (typeof obj[key] === "object") {
            cyObj[key] = deepClone(obj[key]);
          } else {
            cyObj[key] = obj[key];
          }
        }
        // 最后递归完毕以后直接返回 拷贝对象 cyObj
        return cyObj;
      }

      let car1 = deepClone(carProp);
      let car2 = deepClone(carProp);
      let car3 = deepClone(function(ar) {return ar});
      let car4 = deepClone(111);
      car1.carObj['name'] = '打卡'
      car1.name = '小薛'
      car2.cars.shift()
      console.log(car1);   // {name: '小薛', carObj: {…}, cars: Array(2)}
      console.log(car2);   // {name: 'summer', carObj: {…}, cars: Array(1)}
      console.log(car3);   // ƒ (ar) {return ar}
      console.log(car4);   // 111

相关文章

  • vue-深拷贝,深克隆,deepclone最佳方案

    vue--深拷贝,深克隆,deepclone最佳方案

  • 多类型深拷贝

    // 深拷贝:对对象内部进行深拷贝,支持 Array、Date、RegExp、DOMconst deepClone...

  • JS深拷贝

    深拷贝,拷贝引用对象的引用对地址和栈。先编辑deepClone.js文件 在html中引入deepClone.js...

  • 受虐之路(2)

    1.深拷贝与浅拷贝深拷贝只针对复杂数据类型如何实现深拷贝?1)递归function deepClone(obj){...

  • 深拷贝 浅拷贝

    一、对象深拷贝实现 1. 使用递归的方式实现深拷贝 function deepClone(obj){ let ob...

  • js 如何实现深拷贝deepClone

    如果不考虑RegExp, Function, Symbol, 循环引用的问题,那么使用JSON是一个不错的选择。 ...

  • 深入JavaScript Day33 - 序列化实现深拷贝的缺点

    一、序列化实现深拷贝的缺点、手写深拷贝 1、借助序列化实现深拷贝,有哪些缺点? ①不能拷贝函数 ②不能拷贝Symb...

  • 手写深拷贝

    什么是深拷贝? 简单理解:b是a的一份拷贝,b中没有对a中对象的引用。另一种理解:b是a的一份拷贝,把b和a各画出...

  • 手写深拷贝

    注意:Object.assign()不是深拷贝 语法:Object.assign(target, ...sourc...

  • 手写深拷贝

    手写深拷贝 深拷贝 深拷贝简单理解就是b是a的一份拷贝,且b中不存在a中对象的引用 深拷贝的实现 1.JSON序列...

网友评论

      本文标题:手写深拷贝deepClone

      本文链接:https://www.haomeiwen.com/subject/cciekdtx.html