手寫一個深拷貝(深克隆)


1. 首先使用JSON.parse來實現一個深拷貝

let test = {
    x : 1,
    y : 2,
    z : {
        a : 4,
        b : 5
    }
}
// 深拷貝
let result = JSON.parse(JSON.stringify(test));
// 改變拷貝后的值
result.z.a = 40;
console.log(test);
console.log(result);

 

2. 手寫實現深拷貝

function deepClone(obj){
    let cloneObj;
    // 判斷當輸入的數據是簡單數據類型時,直接復制
    if(obj && typeof obj !== 'object'){
        cloneObj = obj;
    }
    // 當輸入的數據是對象或者數組時
    else if(obj && typeof obj === 'object'){
        // 檢測輸入的數據是數組還是對象
        cloneObj = Array.isArray(obj) ? [] : {};

        // 變量數據對象
        for(let key in obj){
            // 判斷對象是否存在key屬性
            if(obj.hasOwnProperty(key)){
                if(obj[key] && typeof obj[key] === 'object'){
                    // 若當前元素類型為對象時,遞歸調用
                    cloneObj[key] = deepClone(obj[key]);
                }
                // 若當前元素類型為基本數據類型
                else{
                    cloneObj[key] = obj[key];
                }
            }
        }
    }
    return cloneObj;
}

// 測試用例
deepClone({
  x: 1,
  y: [ 5, 6, 7 ],
  z: {
    a: 0,
    b: 1
  }
})

 


測試發現兩種效果是一樣的,深拷貝完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM