JavaScript遞歸實現對象深拷貝


   let personOne = {
            name:"張三",
            age:18,
            sex:"male",
            children:{
                first:{
                    name:"zhang",
                    age:13
                },
                second:{
                    name:"小三"
                }
            },
            car:['benz','mazda']
        }

        let personTwo = deepClone(personOne);
        personTwo.car.push([1,2,3]);
        personTwo.children.fron = {
            name:'xiao'
        }
        console.log(personOne,personTwo);

        //對象深拷貝
        function deepClone(origin,target){
            //target是否存在如果不存在創建空對象
            let tar = target || {},
            //判斷是否為引用數據類型
                toStr = Object.prototype.toString,
                arrType='[object Array]';

            for(let key in origin){
                //剝離原型鏈的數據
                if(origin.hasOwnProperty(key)){
                    //判斷是否為引用數據類型 對象或數組
                    if(typeof(origin[key]) === 'object' && origin[key] !== null){
                        if(toStr.call(origin[key]) === arrType ){
                            tar[key] = [];
                        }else{
                            tar[key] = {};
                        }
                        deepClone(origin[key],tar[key]);
                    }else{
                        tar[key] = origin[key];
                    }
                }
            }
            return tar;
        }
       

希望能夠幫助到你們!


免責聲明!

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



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