JavaScript 递归实现深拷贝

   const fn = (obj) => {
        //   判断是数组还是对象
        if (typeof obj === "object") {
            // 数组
          if (Array.isArray(obj)) {
            let result = [];
            for (let item of obj) {
              result.push(fn(item));
            }
            return result;
          } else {
            //   对象
            let result = {};
            for (let prop in obj) {
              result[prop] = fn(obj[prop]);
            }
            return result;
          }
        }
        // 方法或者普通数据
        return obj;
      };
      let obj1 = fn(obj);
      obj1.name = "李四";
      console.log(obj); 
        /* {
        name: "宁次",
        age: 20,
        sister: {
          name: "雏田",
          age: 18,
        },
        arr: [1, 2, 3],
        children: {
          name: "张三",
          age: 18,
        },
      }; */
      console.log(obj1);
      /* {
        name: "李四",
        age: 20,
        sister: {
          name: "雏田",
          age: 18,
        },
        arr: [1, 2, 3],
        children: {
          name: "张三",
          age: 18,
        },
      }; */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值