小心处理多维数组
这是个很简单的问题,但是呢,稍不注意,也会出现错误。
举个例子,我有一个二维数组,如下
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
}
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=1450