这是个很简单的问题,但是呢,稍不注意,也会出现错误。
举个例子,我有一个二维数组,如下
const list = [[1, 2, 3], [4, 5, 6]]
此时,想要复制一份这个数组,我进行如下操作
const list2 = list.slice()
当我执行如下语句时,就会出现如下问题
list[1][1] = 8
console.log(list2) //输出:[ [ 1, 2, 3 ], [ 4, 8, 6 ] ]
结果发现list2
中也被修改了。嗯,原因显而易见,list
是一个多维数组,list.slice()
只是简单的拷贝了list
最外层的这个数组,而list2
里面的数组依旧是引用。
那么,在进行数组拷贝时可以使用深拷贝,以防出现引用类型的问题。
简单写了一下数组深拷贝的实现
function deepClone(originObject) {
let clonedObjects = []
if (originObject instanceof Array) {
const len = originObject.length
for (let i = 0; i < len; i++) {
if (originObject[i] instanceof Array) {
clonedObjects[i] = deepClone(originObject[i])
} else {
clonedObjects[i] = originObject[i]
}
}
}
return clonedObjects
}
如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!
如无特殊声明,文章均为原创,若有不正之处,万望告知。转载请附上原文地址,十分感谢!