基本信息
源码名称:实现深克隆的方法
源码大小:0.46KB
文件格式:.js
开发语言:js
更新时间:2024-12-04
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
实现深克隆的方法
JSON方法:使用JSON.stringify()和JSON.parse()。这种方法简单易懂,但只适用于可以被JSON表示的数据结构,比如数组、对象、字符串、数字、布尔值、null。对于函数、undefined、Symbol、包含循环引用的对象,或者包含BigInt、Map、Set、Date、RegExp等特殊类型的对象,这种方法就不适用了。
function deepClone(obj) {
    return JSON.parse(JSON.stringify(obj));
}
递归方法:通过递归地遍历对象的所有属性,并为每个属性创建新的副本来实现深克隆。这种方法更加灵活,可以处理更复杂的数据结构,但实现起来相对复杂一些。
function deepClone(obj, hash = new WeakMap()) {
    if (obj instanceof Date) return new Date(obj);
    if (obj instanceof RegExp) return new RegExp(obj);
    if (typeof obj !== 'object' || obj === null) return obj;
    if (hash.has(obj)) return hash.get(obj);
    let t = new obj.constructor();
    hash.set(obj, t);
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            t[key] = deepClone(obj[key], hash);
        }
    }
    return t;
}
实例
假设我们有一个包含嵌套对象的复杂对象,我们希望对其进行深克隆。
let obj = {
    name: 'John',
    age: 30,
    address: {
        city: 'New York',
        country: 'USA'
    }
};
let clonedObj = deepClone(obj);
console.log(clonedObj); // 输出克隆后的对象