javascript 实现深拷贝的两种方法

Javascript 496849654@qq.com 6个月前 (10-17) 556次浏览
//第一种方法 递归 
function deepCopy(newObj,oldObj){
    for(k in oldObj){
        //k为属性名, oldObj[k]为属性值
        if(oldObj[k] instanceof Array){   //判断如果属性值为数组
            newObj[k] = [];
            deepCopy(newObj[k],oldObj[k]);
        }else if(oldObj[k] instanceof Object){ //判断如果属性值为对象,这里一定要先判断数组、再判断对象,因为数组也是对象的一种
            newObj[k] = {};
            deepCopy(newObj[k],oldObj[k]);
        }else{
            newObj[k] = oldObj[k];
        }
    }
};

const person = {
    name:'张三',
    age:14,
    hobby:["打篮球","踢足球"],
    classmate:{
        name:'李四',
        age:14,
        hobby:["打篮球","游泳"]
    }
};

const person2 = {};

//调用拷贝方法
deepCopy(person2,person);
console.log("person2:",person2);

//更改person2的爱好 
person2.hobby = ["打篮球","玩电脑"];
//原person的数据未发生变化
console.log("person:",person);

//第二种方法 利用json方法
var jsonPerson = {
    name:'张三',
    age:14,
    hobby:["打篮球","踢足球"],
    classmate:{
        name:'李四',
        age:14,
        hobby:["打篮球","游泳"]
    }
};

//把对象 转化为JSON字符串, 把数据类型由引用转化为普通数据类型
const strPerson = JSON.stringify(jsonPerson);
console.log(strPerson);
//把字符串 转换为 对象
const newPerson = JSON.parse(strPerson);
console.log(newPerson);

css315 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:javascript 实现深拷贝的两种方法
喜欢 (3)