js實現深拷貝


一、深淺拷貝

在使用JS對數組或者object進行操作的時候,如果只是簡單的將它賦予其他變量,那么只要更改其中的任何一個,然后其他的也會跟着改變

舉例說明:

        let arr = [1, 2, 3]
        let arr2 = arr
        arr[0] = 3
        console.log(arr[0])//輸出3
        console.log(arr2[0])//輸出3
        let obj = {
            name: 'obj'
        }
        let obj2 = obj
        obj2.name='obj2'
        console.log(obj.name)//輸出obj2
        console.log(obj2.name)//輸出obj2

解決思路:創建一個新的對象(數組)使用遍歷的方法把原有的數據加到新的對象(數組)里面

解決代碼:

    function deepclone(obj){
        let data
        if(Object.prototype.toString.call(obj)==='[object Array]'){
            data=[]
            for (let index = 0; index < obj.length; index++) {
                data.push(deepclone(obj[index]))
            }
        }else if(Object.prototype.toString.call(obj)==='[object Object]'){
            data={}
            for(let key in obj){
                data[key]=deepclone(obj[key])
            }
        }else {
            return obj
        }
        return data
    }
測試代碼:
let obj1 = {
name: 'obj1',
}
let obj2 = deepclone(obj1)
console.log(obj2.name)//輸出obj1
obj1.name='obj'
console.log(obj2.name)//還是輸出obj1



let arr = [1, 2, 3]
let arr2 =deepclone(arr)
console.log(arr2[0])//輸出1
arr[0]=9
console.log(arr2[0])//還是輸出1

以上測試代碼不嚴謹,但是懶啊,大家如果發現問題可以留言,一起學習共同進步  哈哈哈哈哈哈哈~~~~~!!!


免責聲明!

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



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