zoukankan      html  css  js  c++  java
  • 拷贝(深拷贝)

    ①递归方式实现深拷贝

    /** 深拷贝 */
    objDeepCopy: function(source) {
        var sourceCopy = source instanceof Array ? [] : {};
        for (var item in source) {
            if (typeof source[item] === 'object') {
                if (source[item] === null) {
                    sourceCopy[item] = null;
                } else {
                    sourceCopy[item] = this.objDeepCopy(source[item]);
                }
            } else {
                sourceCopy[item] = source[item];
            }
        }
        return sourceCopy;
    },

    ②用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象。

    可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 或 RegExp 这些就不能用这种方法了。

    // #通过js的内置对象JSON来进行数组对象的深拷贝
    function deepClone(obj) {
      let _obj = JSON.stringify(obj);
      let objClone = JSON.parse(_obj);
      return objClone;
    }

    ③Object.assign()拷贝

    当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

    ④通过jQuery的extend方法实现深拷贝

    let $ = require('jquery');
    let obj1 = {
       a: 1,
       b: {
         f: {
           g: 1
         }
       },
       c: [1, 2, 3]
    };
    let obj2 = $.extend(true, {}, obj1);

    ⑤lodash.cloneDeep()实现深拷贝

    let _ = require('lodash');
    let obj1 = {
        a: 1,
        b: { f: { g: 1 } },
        c: [1, 2, 3]
    };
    let obj2 = _.cloneDeep(obj1);

     参:https://www.jianshu.com/p/1b212581a8d5

  • 相关阅读:
    找出优先要作的工作
    我要作技术研发了
    确定配色方案
    今天公司搬家
    要作界面原型了
    使用自已的命名空间
    进行审核了
    那里有皮肤软件工开发包的源码???
    发葡萄
    作业务规则挺难
  • 原文地址:https://www.cnblogs.com/wn798/p/12016844.html
Copyright © 2011-2022 走看看