zoukankan      html  css  js  c++  java
  • typescript解决深度拷贝中循环引用引起的死循环

    循环引用有人说就是一种不健康的状态,即你中有我,我中有你
    hasObj: any = [];
    deepCopy(data: any) {
    this.hasObj.push(data);
    //最终就是返回数组或者对象
    let t = this.type(data),
    o: any,
    i,
    ni;
    if (t === "array") {
    o = []; //初始化
    } else if (t === "object") {
    o = {}; //初始化
    } else {
    return data;
    }
    if (t === "array") {
    //console.log("t:%o,data:%o", t, data);
    for (i = 0, ni = data.length; i < ni; i++) {
    // if (data[i] == undefined) {
    // break;
    // }
    o.push(this.deepCopy(data[i]));
    }
    return o;
    } else if (t === "object") {
    //console.log("t:%o,data:%o", t, data);
    for (i in data) {
    let index = this.hasObj.indexOf(data[i]);
    if (index > -1) {
    console.log("存在循环引用或属性引用了相同对象");
    // 如果已存在,证明引用了相同对象,那么无论是循环引用还是重复引用,我们返回引用就可以了
    o[i] = this.hasObj[index];
    } else {
    o[i] = this.deepCopy(data[i]);
    }
    }
    return o;
    }
    }
  • 相关阅读:
    NABCD项目分析
    周总结6
    移动端展示
    暑期周进度报告(四)
    暑期周进度报告(三)
    暑期周进度报告(二)
    暑期周进度报告(一)
    《人件》阅读笔记02
    周学习进度报告(2020/06/05)
    2020春季软件工程课程总结
  • 原文地址:https://www.cnblogs.com/QMM2008/p/10207653.html
Copyright © 2011-2022 走看看