uniapp 明明使用了Object.assign复制了一个新的对象,操作新对象中的数组使用push时,新对象和原对象都被操作了?该如何解决只有新对象中的数组添加,但是原对象中的数据不变动
时间: 2024-04-11 10:26:59 浏览: 12
这个问题可能是因为在使用 `Object.assign` 复制对象时,只进行了浅复制,而数组是引用类型,在新对象中的数组和原对象中的数组实际上是指向同一个引用。因此,修改一个数组会影响到另一个数组。
要解决这个问题,你可以使用深复制来创建一个新的对象,确保新对象和原对象中的数组是完全独立的。有几种方法可以实现深复制:
1. 使用 `JSON.parse(JSON.stringify(obj))` 进行深复制:
```javascript
let newObj = JSON.parse(JSON.stringify(oldObj));
```
2. 使用递归函数进行深复制:
```javascript
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let clone = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
let newObj = deepClone(oldObj);
```
无论哪种方法,都会创建一个完全独立的新对象,从而确保只有新对象中的数组被修改,而原对象中的数组不会受到影响。