在开发过程中经常会遇到对一个非常复杂的数据进项操作,但不影响原来的数据,那么我们就要复制出来一份新的数据进行操作,由于复杂数据类型保存的是地址值,所以不能直接等号的方式进行复制,所以我们要封装一个方法来进行深度复制(该方法不仅适用于复杂的对象,也适用于复杂的数组)
上代码:
复制复杂的对象类型
function deepCopy (data1, data2){
for (var key in data1) {
if (typeof data1[key] === 'object' && data1[key] !== null) {
data2[key] = data1[key].constructor === Array ? [] : {};
deepCopy(data1[key], data2[key]);
} else {
data2[key] = data1[key];
}
}
}
let oldObj = {
val1: ['a','b','c'],
val2: 'name',
val3: {
num1: '123',
num2: 'ddd'
}
}
let newObj = {}
deepCopy(oldObj,newObj);
newObj.val1[0] = 'f';
newObj.val3.num1 = '456';
console.log(oldObj);
console.log(newObj);
// 对比结果,修改新的数据并不会影响旧的数据
复制复杂的数组类型
function deepCopy (data1, data2){
for (var key in data1) {
if (typeof data1[key] === 'object' && data1[key] !== null) {
data2[key] = data1[key].constructor === Array ? [] : {};
deepCopy(data1[key], data2[key]);
} else {
data2[key] = data1[key];
}
}
}
let oldArr = [{val1: 'name'},{val2: 'age'}]
let newArr = [];
deepCopy(oldArr,newArr);
newArr[1].val2 = 'aaa';
console.log(oldArr);
console.log(newArr);
// 对比结果,修改新的数据同样不会影响旧的数据
版权声明:本文为tion1992原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。