您的位置 首页 技术

JS 深拷贝的三种实现方式

JS 深拷贝的三种实现方式 1、将对象转换为JSON字符串形式,再将其转换为原生JS对象; //_tmp和result是相互独立的,没有任何联系,有各自的存储空间。let deep…

JS 深拷贝的三种实现方式

1、将对象转换为JSON字符串形式,再将其转换为原生JS对象;

//_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循环实现遍历和复制;

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”方法进行复制即可实现深拷贝。

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 深拷贝的三种实现方式的详细内容,更多请关注24课堂在线网其它相关文章!

本文来自网络,不代表24小时课堂在线立场,转载请注明出处:https://www.24ketang.cn/65921.html

为您推荐

返回顶部