0
点赞
收藏
分享

微信扫一扫

angular7 深拷贝方法


法一:使用lodash

npm i --save lodash
const _ = require('lodash');
console.log(_.cloneDeep(list));

法二:手动写个共通方法

public static clone(target: any): any {
    if (target == null) {
        return null;
    }
    if (target instanceof Date) {
      return value;
    }
    if (!(target instanceof Array) && !(typeof target === 'object')) {
      return value;
    }
    const cloneObject = new target.constructor();
    Object.keys(target).forEach(
        (attr: string) => {
            cloneObject[attr] = (typeof target[attr] === 'object') ? this.clone(target[attr]) : target[attr];
        }
    );

    return cloneObject;
}

法三:递归

function each(obj, cb) {
  if (obj) {
    if (Array.isArray(obj)) {
      obj.forEach(cb);
    } else {
      Object.keys(obj).forEach(key => {
        cb(obj[key], key);
      });
    }
  }
}

function cloneDeep(obj, preserveUndefined) {
  if (preserveUndefined === undefined) {
    preserveUndefined = true;
  }
  let clone;
  if (obj === null) {
    return null;
  }
  if (obj instanceof Date) {
    return obj;
  }
  if (obj instanceof Array) {
    clone = [];
  } else if (typeof obj === 'object') {
    clone = {};
  } else {
    return obj;
  }
  each(obj, (value, name) => {
    if (value !== undefined) {
      clone[name] = cloneDeep(value, preserveUndefined);
    } else if (preserveUndefined) {
      clone[name] = undefined;
    }
  });
  return clone;
}

module.exports = { each, cloneDeep };

举报

相关推荐

0 条评论