用扩展运算符深拷贝数组:
直接粘贴代码:
let arr = [1, 2, 3, 4, 5, 6];
let arr1 = [...arr];
arr1.push(7);
console.log(arr); //[1, 2, 3, 4, 5, 6]
console.log(arr1); //[1, 2, 3, 4, 5, 6, 7]
当数组是一维数组时,扩展运算符可以进行完全深拷贝,改变拷贝后数组的值并不会影响拷贝源的值。
但是,当数组为多维时:
let arr = [1, 2, 3, 4, 5, 6, [1, 2, 3]];
let arr1 = [...arr];
arr1.push(7);
arr1[arr1.length - 2][0] = 100;
console.log(arr); //[1, 2, 3, 4, 5, 6,[100, 2, 3]]
console.log(arr1); //[1, 2, 3, 4, 5, 6, [100, 2, 3],7]
对象也是相同的道理
深拷贝的实现方法
let cloneObj=JSON.parse(JSON.stringify(obj));
第二种
unction deepClone(obj){
if(obj && typeof obj==="object"){
let objClone = Array.isArray(obj)?[]:{};
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
方法一:循环数组每个对象都复制(其实还是对象复制)
for(let i=0;i<res.data.length;i++){
this.OriginalData.push(Object.assign({}, res.data[i]))
}