JS对象深拷贝

2019-05-17  本文已影响0人  里昂的凍檸茶

方法一

var obj = {
    name:"Leon",
    age:17,
    hobby:function(){
        let hb = "swimming";
        return hb;
    }
}
var newObj = {};
for(val in obj){
    newObj[val] = obj[val];
}
console.log(newObj);

注意:
该方法只适用于简单类型的对象,不适用于对象里面嵌套对象;
即使拷贝成功,给新对象里的对象的变量重新赋值会改变原对象!

所以,对于复杂的对象(对象里面嵌套对象),我们要采用方法二;

方法二:递归

var obj = {
    name:"Leon",
    age:17,
    hobby:function(){
        let hb = "swimming";
        return hb;
    },
    data:{
        day:"Tus",
        time:"morning"
    },
    arr:[
        {name:"tt"},
        {name:"yy"}
    ]
}
function deepCopy(obj){
    let copyObj = Array.isArray(obj)?[]:{};
    for(var key in obj){
        copyObj[key] = typeof(obj[key])==="object"?deepCopy(obj[key]):obj[key];
    }
    console.log(copyObj==obj);//false
    return copyObj;
}
console.log(deepCopy(obj))

该方法使用于任何对象

上一篇下一篇

猜你喜欢

热点阅读