前言
今天写业务的时候发现一个问题:两个嵌套对象的数组分别赋值为新的常量,常量 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;