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;
    }
    }
  • 相关阅读:
    c&c++中的宏
    cmake教程
    什么是Grunt
    npm-install camo
    在node.js中建立你的第一个HTTp服务器
    highChart数据动态更新
    css:before和after中的content属性
    清除float浮动三种方式
    中文标准web字体
    网站桌面端和手机端不同url的设置
  • 原文地址:https://www.cnblogs.com/QMM2008/p/10207653.html
Copyright © 2011-2022 走看看