在js中如果直接用=进行数组的拷贝,那么这样就只是浅拷贝,两个变量实际指向的是同一个地址,
这不是我们想要的结果。
因此我们需要对数组进行深拷贝(对象亦如是)。
一般的数组(不包括对象元素的数组),我们可以直接使用concat或slice进行深拷贝,亦或者直接写一个for循环进行逐一复制。
如:
从以上结果可以看出concat和slice(0)的确可以进行深拷贝。但是如果数组中包含有对象,而我们又要往数组中插入对象时,这两种方法就不行了。
从上面结果可知,我们进行的只是一次浅拷贝。如果我们要进行深拷贝,那么就需要对整个数组以及数组中的对象进行遍历,注意复制才行。
var deepCopy=function(arr) { if (arr instanceof Array) { var n = []; for (var i = 0; i < arr.length; ++i) { n[i] = this.deepCopy(arr[i]); } return n; } else if (arr instanceof Object) { let n = {}; for (var i in arr) { n[i] = this.deepCopy(arr[i]); } return n; } else { return arr; } }