先说目的
在vue中,有数组X,数组中有很多个对象。想实现这个数组的深拷贝。某个地方要使用拷贝数组X1。
问题是:我X1是深拷贝的。但是我修改了X,依然会影响X1。我想要的效果是两者互补影响
以下是我的理解:vue中的setter。是监听属性变化。只要属性一变。属性相关的操作都会在做一遍,所以我深拷贝了一份最新修改的,不知道我这样理解对不对???
解决方法
先说目的
在vue中,有数组X,数组中有很多个对象。想实现这个数组的深拷贝。某个地方要使用拷贝数组X1。
问题是:我X1是深拷贝的。但是我修改了X,依然会影响X1。我想要的效果是两者互补影响
以下是我的理解:vue中的setter。是监听属性变化。只要属性一变。属性相关的操作都会在做一遍,所以我深拷贝了一份最新修改的,不知道我这样理解对不对???
解决方法
单单slice,只能拷贝数组而已,数组元素如果是对象,那就不是深拷贝了。我之前遇到过。
简单写了个方法实现:其实就是遍历数组的时候数组元素如果是对象,用Object.assign来拷贝一份。不然的话,两个数组里的元素还是共用的同一份对象
function copyArr(arr){
return arr.map((e)=>{
if(typeof e === 'object'){
return Object.assign({},e)
}else{
return e
}
})
}
function coppyArray(arr){
return arr.map((e)=>{
if(typeof e==='object'){
return Object.assign({},e);
}else{
return e;
}
})
}
9 回答3.2k 阅读
4 回答1.8k 阅读
6 回答913 阅读✓ 已解决
5 回答890 阅读✓ 已解决
4 回答610 阅读✓ 已解决
5 回答998 阅读
8 回答1.2k 阅读
简单的对象可以这样拷贝,
JSON.parse(JSON.stringify(obj))