deepClone

作者: peroLuo | 来源:发表于2019-12-18 16:28 被阅读0次
deep(target: any, map = new WeakMap()): any {
    const isObject =
      target !== null &&
      (typeof target === "object" || typeof target === "function");
    // 过滤不是对象的target
    if (!isObject) {
      return target;
    } else {
      let cloneTarget = new target.constructor();
      if (map.get(target)) {
        return map.get(target);
      }
      map.set(target, cloneTarget);
      // Map数据
      if (Object.prototype.toString.call(target) === "[object Map]") {
        target.forEach((value: any, key: any) => {
          cloneTarget.set(key, this.deep(value, map));
        });
        return cloneTarget;
      }
      // Set数据
      else if (Object.prototype.toString.call(target) === "[object Set]") {
        target.forEach((value: any) => {
          cloneTarget.add(this.deep(value, map));
        });
        return cloneTarget;
      }
      // 函数
      else if (Object.prototype.toString.call(target) === "[object Function]") {
        console.log(target.toString);
        return null;
      }
      // 对象、数组
      else {
        for (let key in target) {
          cloneTarget[key] = this.deep(target[key], map);
        }
        return cloneTarget;
      }
    }
  }

相关文章

网友评论

      本文标题:deepClone

      本文链接:https://www.haomeiwen.com/subject/usuunctx.html