小白的JS之路--深拷贝

2018-07-18  本文已影响0人  阿古瓜

一. 先从浅拷贝开始

function clone(obj){
    var clone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj==="object"){
        for( var property in obj){
            clone[property] = obj[property];
        }
        return clone;
    } else {
        return obj;
    }
}

二.开始我们真正的深拷贝

// 一.用递归实现的深拷贝 
function deepClone(obj){
    let objClone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj==="object"){
        for(key in obj){
            if(obj.hasOwnProperty(key)){
                //判断ojb子元素是否为对象,如果是,递归复制
                if(obj[key]&&typeof obj[key] ==="object"){
                    objClone[key] = deepClone(obj[key]);
                }else{
                    //如果不是,简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
} 

// 二.用JSON对象的parse和stringify实现的深拷贝
function deepClone(obj){
    let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
}  
上一篇下一篇

猜你喜欢

热点阅读