JS里要把A数组复制到B数组
如果只是A=B赋值过去
修改B内容的时候,A内容也会随之改变
其原理是因为每个数组都会在内存里开辟一个内存区间,如果只是简单的A=B复制,只是把A的指针也复制给了B
所以A,B指针是共用的,B修改后,A再去读该指针内容自然就一样
这被称为浅拷贝
这时候使用array.concat 或 array.slice可以实现数组的深拷贝
如果数组里的是对象
例如 A=[{},{}]
var B=A.slice() 后,出现以下情况
B.push({})
B数组元素+1,A数组无变化
B[0].new = 1,A数组的[0]也会出现new=1
由此推断
数组元素里的对象也是有指针的,slice后只是数组有新指针,但是元素里的对象是指针级复制过去的
后面我又尝试过
A.forEach(e=>{
B.push(e)
})
得到的结果一样,由此证明复制过去的对象是对象指针
解决方案:
最傻瓜的方式,转为json字符串让他在内存上独立,再转回数组。
B=JSON.parse(JSON.stringify(A))
感觉总有哪里不对,可能怀疑效率不高,就想出接下来的处理方案