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