深克隆【回溯】【队列】

第一种没什么说的,就是尾递归会耗性能

var a = {
  b: {
    c: [{
      c: 3
    }]
  },
  e: [{
    a: 2
  }]
}

function deepClone(obj) {
  let result = Array.isArray(obj) ? [] : {}
  for (const key in obj) {
    const thisValue = obj[key]
    if (thisValue.constructor===Array||thisValue.constructor===Object) {
      result[key] = deepClone(thisValue)
    } else {
      result[key] = thisValue
    }
  }
  return result
}
let res=deepClone(a)
console.log(res);
console.log(res.b.c[0] === a.b.c[0]);




let cloneTempData = [
    {
      index: "1-0",
      name: "name",
      position: "PATH",
      type: "String",
      cls: "",
      isRequired: false,
      fixedValue: "",
      defaultValue: "",
      children: [
        {
          id: "add_temp_id",
          name: "这里写参数名",
          position: "",
          cls: "",
          type: "",
          isRequired: "",
          fixedValue: "",
          defaultValue: "",
          index: "0-0-0",
          children: null,
        },
        {
          id: "add_temp_id",
          name: "这里写参数名",
          position: "",
          cls: "",
          type: "",
          isRequired: "",
          fixedValue: "",
          defaultValue: "",
          index: "0-0-1",
          children: [1, 23],
        },
      ],
    },
  ]


const thisData = {
  parent: cloneTempData.constructor===Array?[]:{},
  data: cloneTempData,
};
let t = [thisData];
while (t.length) {
  const tdata = t.shift();
  for (const key in tdata.data) {
    const thisV=tdata.data[key]
    const constructor = thisV && thisV.constructor;
    let nextObj;
    if (constructor === Array) {
      nextObj = [...thisV];
    } else if (constructor === Object) {
      nextObj = { ...thisV };
    } else {
      nextObj = thisV;
    }
    tdata.parent[key] = nextObj;
    if (typeof thisV === "object" && thisV) {
      t.push({
        parent: nextObj,
        data: thisV,
      });
    }
  }
}
console.log(thisData.parent[0].children,thisData.data[0].children);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值