淺拷貝和深拷貝的方法

淺拷貝:也就是在對象複製時,只是對對象中的數據成員進行簡單的賦值,如果對象中存在動態成員,即指針,淺拷貝就會出現問題。
深拷貝:對於深拷貝,針對成員變量存在指針的情況,不僅僅是簡單的指針賦值,而是重新分配內存空間。


1.ES6實現淺拷貝: Object.assign()

e.g.  Object.assign({a:1},{a:2,b:3})

      輸出結果{a: 2, b: 3}

2.js實現淺拷貝

function shallowClone(source) {
    if(!source || typeof source!=Object){
        return new Error('error');
    }
    var targetObj=source.constructor()===Array?[]:{};
    for(var keys in source){
        if(source.hasOwnProperty(keys)){
            targetObj[keys]=source[keys];
        }
    }
    return targetObj;
}

3.js實現深拷貝

function cloneDeep(obj){
    if(typeof obj !== 'object' || Object.keys(obj).length === 0 ){
        return obj;
    }
    let resultData = {};
    return recurison(obj, resultData);
}

function recurison(obj, data = {}){
    for(key in obj){
        if(typeof obj[key] == 'object' && Object.keys(obj[key].length > 0 )){
            data[key] = recurison(obj[key]);
        }else{
            data[key] = obj[key];
        }
    }
    return data;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章