JavaScript 深拷貝

在JS中,每個變量都是指向一個數據的地址,所以不能用簡單的=來拷貝數據。有時候深拷貝一個對象或者數組或者字典是剛需的,好像在JS中深拷貝是個問題?

好多來自谷歌百度的大佬們都說用JSON的```JSON.stringify()```把字典對象JSON化然後再```JSON.parse()```回來,但是一旦字典裏面是對象,就馬上不行了,考慮到每個Object的屬性是可讀取的,我嘗試用遞歸來實現深拷貝。

測試的情況不多,只是覆蓋了我剛需的部分,如果這種方式大佬們用不了或者複雜對象失效了請輕噴。

目前針對數組嵌套字典,字典嵌套數組,數組嵌套數組,字典嵌套字典,字典或數組嵌套一些對象做了測試,是沒問題的。

function arrayDeepCopy(obj){
    if(obj instanceof Object){
        let tmp;
        if(obj instanceof Array){
            tmp = obj.concat([]);
        }else{
            tmp={...obj};
        }
        for(let j in tmp){
            tmp[i]=arrayDeepCopy(tmp[i])
        }
        return tmp;
    }
    return obj;
}

 

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