您的位置是:网站首页>Javascript编程Javascript编程

JS 深拷贝的三种实现方式

少儿编程网2020-06-01 12:29:32Javascript编程 人已围观 来源:少儿编程 -用户投稿

简介JS深拷贝的三种实现方式1、将对象转换为JSON字符串形式,再将其转换为原生JS对象;//_tmp和result是相互独立的,没有任何联系,有各自的存储空间。letdeepClone=function(obj){let_tmp=JSON.stringify(obj);//将对象转换为json字符串形

ImJ少儿编程网-https://www.pxcodes.com

JS 深拷贝的三种实现方式ImJ少儿编程网-https://www.pxcodes.com

1、将对象转换为JSON字符串形式,再将其转换为原生JS对象;ImJ少儿编程网-https://www.pxcodes.com

//_tmp和result是相互独立的,没有任何联系,有各自的存储空间。
let deepClone = function (obj) {
    let _tmp = JSON.stringify(obj);//将对象转换为json字符串形式
    let result = JSON.parse(_tmp);//将转换而来的字符串转换为原生js对象
    return result;
};

let obj1 = {
    weiqiujaun: {
        age: 20,
        class: 1502
    },
    liuxiaotian: {
        age: 21,
        class: 1501
    }
};

let test = deepClone(obj1);
console.log(test);

2、使用JS中的for循环实现遍历和复制;ImJ少儿编程网-https://www.pxcodes.com

function deepClone(obj) {
    let result = typeof  obj.splice === "function" ? [] : {};
    if (obj && typeof obj === 'object') {
        for (let key in obj) {
            if (obj[key] && typeof obj[key] === 'object') {
                result[key] = deepClone(obj[key]);//如果对象的属性值为object的时候,递归调用deepClone,即在吧某个值对象复制一份到新的对象的对应值中。
            } else {
                result[key] = obj[key];//如果对象的属性值不为object的时候,直接复制参数对象的每一个键值到新的对象对应的键值对中。
            }

        }
        return result;
    }
    return obj;
}

let testArray = ["a", "b", "c", "d"];
let testRes = deepClone(testArray);
console.log(testRes);
console.log(typeof testRes[1]);

let testObj = {
    name: "weiqiujuan",
    sex: "girl",
    age: 22,
    favorite: "play",
    family: {brother: "son", mother: "haha", father: "heihei"}
};
let testRes2 = deepClone(testObj);
testRes2.family.brother = "weibo";
console.log(testRes2);

3、利用数组的“Array.prototype.forEach”方法进行复制即可实现深拷贝。
ImJ少儿编程网-https://www.pxcodes.com

let deepClone = function (obj) {
    let copy = Object.create(Object.getPrototypeOf(obj));
    let propNames = Object.getOwnPropertyNames(obj);
    propNames.forEach(function (items) {
        let item = Object.getOwnPropertyDescriptor(obj, items);
        Object.defineProperty(copy, items, item);

    });
    return copy;
};

let testObj = {
    name: "weiqiujuan",
    sex: "girl",
    age: 22,
    favorite: "play",
    family: {brother: "wei", mother: "haha", father: "heihei"}
}
let testRes2 = deepClone(testObj);
console.log(testRes2);

推荐教程:《JS教程》

以上就是JS 深拷贝的三种实现方式的详细内容,更多请关注少儿编程网其它相关文章!ImJ少儿编程网-https://www.pxcodes.com

来源:php中文网ImJ少儿编程网-https://www.pxcodes.com


相关文章:

支持一下 ( )

JS 深拷贝的三种实现方式

      匿名评论
    • 评论
    人参与,条评论
    JS 深拷贝的三种实现方式

微信公众号

免费视频教程

先知道