zoukankan      html  css  js  c++  java
  • 深浅拷贝方式

    浅拷贝方式(对象只有一层属性就是深拷贝,多层的就是浅拷贝):

    es6的 {...obj}
    和Object.assign(obj)

    深拷贝方式(所以层都进行拷贝):

    一般方式:

    jquery库 $.extend(true,[],obj)
    lodash库 _.cloneDeep(obj)
    JSON.parse(JSON.stringify(obj))

    递归方式:

    原理:传入对象 判断是对象还是数组 创建x[]或{} 遍历对象 hasOwnProperty存在某个属性 赋值空对象=递归这个方法 有下一层对象 递归调用 不存在下一次 return x

    //递归实现深拷贝
    function deepClone(obj) {
        //判断是对象函数数组 创建空对象/数组
        var objClone = Array.isArray(obj) ? [] : {};
        //引用类型
        if(obj && typeof obj === 'object') {
            //遍历对象 存在这个属性 赋值空对象 = 递归这个方法 
            for(key in obj) {
                if(obj.hasOwnProperty(key)) {
                    if(obj[key] && typeof obj[key] === "object") {//有下一层对象
                        objClone[key] = deepClone(obj[key])
                    } else { //没有下一层
                        objClone[key] = obj[key];
                    }
                }
            }
        }
        return objClone;
    }

     深拷贝数组(从0 开始拷贝):

    arr.slice(0)

    欢迎一起交流!
    【http://wuhairui.cnblogs.com/】

  • 相关阅读:
    Section 3.1 Shaping Regions
    3D@OpenSource
    查找资料
    Section 3.1 Shaping Regions Again
    USACO Contact IOI’98 TLE
    事项ON丰宁坝上草原
    四叉树@POJ1610 Quad Trees
    在TabCtrl上放View@MFC
    CUGB的一场周赛
    贴图程序进展
  • 原文地址:https://www.cnblogs.com/wuhairui/p/14693597.html
Copyright © 2011-2022 走看看