众所周知,数组在JavaScript中如果简单的赋值[数组A] = [数组B]
,那么AB是共用同一个内存地址,修改A/B中任何一个都会造成两者一起变化。
这个时候就涉及到数组拷贝问题
使用slice()/concat()返回新数组实现拷贝
这种方法可以很简单的实现数组拷贝,直接调用数组方法,在代码中一句话就能搞定。arr.slice(0)
: 数组的slice(star,end)
方法,通过传入的参数截取数组,并且返回,截取后的数组,如果开头无结尾,就截取从开头到结尾的所有数据,slice()方法的数组是从1开始,所以slice(0)就是返回整个数组。arr.concat()
: 数组的concat([])
方法,是将调用的数组和传入的数组链接,并且返回一个新数组。下面使用的时候没有传入需要拼接的数组,那就是返回原来的数组。
let arr = [1,2,3]
let new_arr1 = arr.slice(0)
let new_arr2 = arr.concat()
console.log(arr,new_arr1,new_arr2)
// 之后修改数据
arr.push(4)
new_arr1.shift()
new_arr2.unshift(0)
console.log(arr,new_arr1,new_arr2)
结果: