antvis/G6

大数据量的情况下,会导致浏览器崩溃,考虑换一个方式进行深拷贝? #4938

visiky posted onGitHub


  1. 使用第三方库:例如lodash的_.cloneDeep方法。

  2. 递归拷贝

    function deepClone(obj, hash = new WeakMap()) {
     if (obj === null) return obj; // 如果是null或者undefined我就不进行拷贝操作
     if (obj instanceof Date) return new Date(obj);
     if (obj instanceof RegExp) return new RegExp(obj);
     // 可能是对象或者普通的值  如果是函数的话是不需要深拷贝
     if (typeof obj !== 'object') return obj;
     // 对象分为两种,一种是数组一种是普通的对象
     if (hash.get(obj)) return hash.get(obj);
     let cloneObj = new obj.constructor;
     // 找到的是所属于自己的属性才拷贝
     hash.set(obj, cloneObj);
     for (let key in obj) {
         if (obj.hasOwnProperty(key)) {
             // 实现一个递归拷贝
             cloneObj[key] = deepClone(obj[key], hash);
         }
     }
     return cloneObj;
    }
  3. 使用StructuredClone方法:虽然这个方法现在还是实验性质的,但它可以拷贝多种类型的对象,包括ArrayBuffer、Blob、ImageData、Map和Set等。

posted by visiky over 1 year ago

直接来个 PR 呗,2、3 都可以~

posted by Yanyan-Wang over 1 year ago

Fund this Issue

$0.00
Funded

Pull requests