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