还在为js实现深拷贝发愁?快进来看看吧~

92 阅读1分钟

一、深拷贝与浅拷贝

浅拷贝与深拷贝主要是针对复杂数据类型。

浅拷贝:拷贝的是地址,数据仍然只有一份,修改其中一个数据会影响另一个,简单的赋值就是浅拷贝。

深拷贝:拷贝的是数据,数据具有两份,修改一个数据不影响另一个,必须自己写代码来实现。

二、实现深拷贝的三种方法

1.递归

o表示被拷贝的数据,t表示拷贝的数据

function deepCopy(t, o){
            for(let key in o){
                // key表示数据的键名,o[key]则表示数据的键值
                if(Array.isArray(o[key])){       
                //Array.isArray 用于判断是否是array数组类型
                // 遇到数组,在t中创建一个空数组
                    t[key]=[]
                    deepCopy(t[key],o[key]);
                }else if(o[key] instanceof Object){ 
                // 判断是否是object,若为对象,以该实例对象为起点的原型链上必有Object原型对象
                // 遇到对象,在t中创建一个空对象    
                    t[key] = {}
                    deepCopy(t[key], o[key]);
                }else{      
                // 简单数据类型
                    t[key] = o[key]          
                }
            }
        }

2.JSON

obj表示被拷贝的数据,target表示拷贝的数据

    let strJSON = JSON.stringify(obj)
    let target =JSON.parse(strJSON)

3.第三方代码库lodash

使用方法前需要引入lodash的js库

obj表示被拷贝的数据,target表示拷贝的数据

let target = _.cloneDeep(obj)