小心处理多维数组

这是个很简单的问题,但是呢,稍不注意,也会出现错误。

举个例子,我有一个二维数组,如下

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
}
如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注