let 连续复制_JS 深拷贝的三种实现方式

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值