JS 实现深拷贝、浅拷贝的几种方法

2022-09-16  本文已影响0人  蕉下客_661a

对象深拷贝

第一种:使用递归的方法实现深拷贝

function deepClone(obj){
    let objClone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj==='object'){
        for(let key in obj){
            if(obj[key] && typeof obj[key]==="object"){
                objClone[key]=deepClone(obj[key])
            }else{
                objClone[key] = obj[key]
            }
        }
    }
    return objClone;
}

第二种:使用JSON.parse()和JSON.stringify()

JSON.parse(JSON.stringify(obj))

无法实现对象中方法的深拷贝

第三种:使用Object.assign()

Object.assign({},obj)

注意:只能深拷贝对象的一级属性,二级属性之后即为浅拷贝

数组的深拷贝

第一种:concat(arr1,arr2)

只有在数组元素是一维的时候,是深拷贝,一维以上是对值的引用

第二种:slice(idx1,idx2)

①没有参数的时候,是拷贝数组
②一个参数的时候,拷贝从起始位置到数组末尾的元素
③两个参数的时候,拷贝从起始位置到 结束位置的元素(不包含结束位置的元素,含头不含尾)
一维数组元素是深拷贝,数组元素二维以上是值的引用

上一篇 下一篇

猜你喜欢

热点阅读