【JavaScript】深克隆使用while实现

function deepClone1(o) {
      let result = {};
      // 栈
      let loopList = [
        {
          parent: result,
          key: undefined,
          data: o,
        },
      ];
      while (loopList.length) {
        let node = loopList.pop();
        let { parent, key, data } = node; //解构赋值
        let res = null;
        if (typeof key === "undefined") {
          // 如果 key 等于 undefined,将 parent值赋给 res,初始化对象容器
          res = parent;
        } else {
          // key不是undefined说明已经进入对象的循环,初始化对象容器
          res = parent[key] = {}; // 将 parent[key] 值赋给 res,并初始化为 {},这个时候 res代表的是 result 里面存储的一个对象
        }
        for (let i in data) {
          if (isObject(data[i])) {
            //是对象的话存入栈中,等到下次循环时,将里面的数据取出来判断再赋值,如此循环
            loopList.push({
              parent: res,
              key: i,
              data: data[i],
            });
          } else {
            res[i] = data[i]; //不是对象的话直接赋值
          }
        }
        console.log("result==>", result);
      }
      return result;
    }
    const a1 = {
      a: 1,
      b: 2,
      c: { c1: 3, c2: { c21: 4, c22: 5 } },
      d: "asd",
      e: { c4: 3, c5: { c51: 4, c52: 5 } },
    };
let cloneA1 = deepClone1(a1);
console.log(cloneA1.c.c1 === a1.c.c1);// false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值