记笔记一个因数组赋值引起的深拷贝浅拷贝的学习

34次阅读

共计 480 个字符,预计需要花费 2 分钟才能阅读完成。

前言

今天写业务的时候发现一个问题:两个嵌套对象的数组分别赋值为新的常量,常量 push 合并,原数组也会合并。

复现问题

const newArr1 = oldArr1;
const newArr2 = oldArr2;
newArr1.push(newArr2); // 到这里 newArr1 和 oldArr1 都变了

问题原因

直接把原数组定义为常量,如const newArr1 = oldArr1,这是浅拷贝,浅拷贝数组在内存中指向的地址是相同的,所以 newArr1 被操作后 oldArr1 也会变化。

那么,如果是这样定义 const newArr1 = [...oldArr1] 呢?
这也是浅拷贝,无法解决问题。

解决方法:深拷贝

方法 1:

const newArr1 = JSON.parse(JSON.stringify(oldArr1));
const newArr2 = JSON.parse(JSON.stringify(oldArr2));
newArr1.push(newArr2); // 这样就没问题了

方法 2:

const [...newArr1] = oldArr1;
const [...newArr2] = oldArr2;

正文完
 0