最近做项目需要拷贝数组对象,遇到的问题 ,直接看代码废话不多说
拷贝后的copyArr 的地址address 应为“广东”,“贵州”才是期望得到的数据,但是看控制台输出arr、copyArr、changeArr这三个数组里面每个对象的address 都为“广东(深圳)”
由此得出他们指针都指向了同一个内存地址,[...copyArr]拷贝并没有开辟新的内存空间,当时也很纳闷,而且也思考了很久,然后再去亲手试,直接上图
可以看出这次拷贝copyArr,确实是期望的数据,说明es6 [...] 拷贝确实是开辟了新的内存空间,但是上面的数组对象也是这样拷贝的为什么又不行?,当初觉得很纳闷,而且 这个问题自己也找了好久,感觉代码木有错呀!
后来想到了Object.assign()拷贝对象,Object.assign()直接拷贝整个数组也不行,但是它可以拷贝数组里面的每个对象呀!因此用遍历去拷贝数组里面每个对象不就ok了?通过代码实践,确实能拷贝,直接上代码如下图
通过代码及控制台输出信息可以看到确实是能拷贝成功!
到这里肯定还有人问那还有没有别的方法了?对应我这种菜鸟来说也希望有其他的方法或者是更好的方法,因此我也查先资料,也有如下的方法,
直接看代码及控制台信息,这种方式也是可以拷贝的,而且看起来代码好像比上面的更少更简洁,但是这种方法也有缺陷的,如果你对象里面某个属性的值是undefined或者function的话这种方法是拷贝不到这这种类型的属性,或者你对象里面的某个属性的值是NaN的话拷贝出来的这个属性值会变成null,通过自己代码实践如下
因此可以根据业务的复杂性及对象的复杂程度来进行选择用那种方法更好,可能还会有其他更好的方法只是我这菜鸟不知道,如果你也有遇到这问题,或者正在解决这个问题的,或者有更好的方法的说出来让我或者大家也学习学习,有写的不好或者不对的地方希望大家多多指教。