js数组或者对象深拷贝和浅拷贝函数封装

浅拷贝

概念:浅拷贝的意思就是只复制引用,而未复制真正的值。仍指向同一个地址,修改时原对象也会受到影响

方法:

1.利用 = 赋值操作符实现浅拷贝。

2.数组的浅拷贝一般使用 slice、concat。

3.数组浅拷贝 - 遍历 。

4.对象浅拷贝 - Object.assign()。

5.对象浅拷贝 - 扩展运算符

函数封装

//对象及数组浅拷贝函数封装
    function shallowCopy(objOrArr){
        var type = objOrArr instanceof Array ? 'arr' : 'obj'
        var newObjOrArr = objOrArr instanceof Array ? [] : {}
        if(type === 'arr'){
            newObjOrArr=[].concat(objOrArr)
        }else{
          for(var key in objOrArr){
              if(objOrArr.hasOwnProperty(key)){
                    newObjOrArr[key]= objOrArr[key]
              }
          }
        }

        return newObjOrArr
    }

深拷贝

概念:深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了。修改时原对象不再受到任何影响

方法:

1.利用 JSON 对象中的 parsestringify

2.利用递归来实现每一层都重新创建对象并赋值。

函数封装

//对象及数组深拷贝函数封装
        function deepCopy(objOrArr) {
            var type = objOrArr instanceof Array ? 'arr' : 'obj'
            var newObjOrArr = objOrArr instanceof Array ? [] : {}
            if (type === 'arr') {
                newObjOrArr = JSON.parse(JSON.stringify(objOrArr))
            } else {
                for (var key in objOrArr) {
                    if (objOrArr.hasOwnProperty(key)) {
                        newObjOrArr[key] = typeof objOrArr[key] === 'object' ? deepCopy(objOrArr[key]) : objOrArr[key]
                    }
                }
            }

            return newObjOrArr
        }

 

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值