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/】

  • 相关阅读:
    JSAJAX请求
    ES6-形参默认值
    ES6-三点运算符
    ES6-箭头函数
    ES6-对象的简写方式
    ES6-使用模板字符串完成字符串拼接
    201712-2 游戏
    Product of Polynomials
    Maximum Subsequence Sum
    蓝桥杯 龟兔赛跑预测
  • 原文地址:https://www.cnblogs.com/wuhairui/p/14693597.html
Copyright © 2011-2022 走看看