JavaScript 中创建多维数组的副本而非引用

阅读时长 3 分钟读完

在 JavaScript 中,当我们复制数组时,有时候我们需要创建一个新的数组,该新数组只包含原始数组中的值,而不是引用原始数组中的值。这尤其适用于多维数组。

多维数组

多维数组是由多个一维数组组成的数组。每个一维数组称为该多维数组的子数组,并且可以通过使用多个索引来访问它们。例如,以下是一个二维数组:

复制数组

在 JavaScript 中,有两种方法可以复制数组:浅拷贝和深拷贝。浅拷贝只复制原始数组的引用,而不是值,这意味着如果我们更改新数组中的值,则会更改原始数组中的值。深拷贝会创建一个新的数组,并将原始数组中的所有值复制到新数组中。

浅拷贝

要将数组浅拷贝到新变量中,请使用以下语法:

这将创建一个名为 copyArr 的新变量,并将 arr 的引用分配给它。现在,如果我们更改 copyArr 中的任何值,arr 中的相应值也会更改:

深拷贝

要将数组深拷贝到新变量中,我们可以使用 Array.from() 或扩展运算符(...)来复制原始数组中的值。

以下是使用 Array.from() 来创建一个新数组的示例:

这会创建一个名为 copyArr 的新数组,并将原始数组 arr 中的所有值复制到其中。如果我们更改 copyArr 中的值,则不会影响原始数组 arr 中的相应值:

另一种深拷贝数组的方法是使用扩展运算符(...):

这也会创建一个名为 copyArr 的新数组,并将原始数组 arr 中的所有值复制到其中。如果我们更改 copyArr 中的值,则不会影响原始数组 arr 中的相应值:

多维数组的副本

要创建多维数组的副本而不是引用,请使用递归函数和深拷贝技术来复制每个子数组。

以下是使用递归函数和 Array.from() 来创建一个二维数组的副本的示例:

-- -------------------- ---- -------
-------- ------------- -
  ------ --------------- ----- -- ------------------ - ------------- - -----
-

----- --- - -
  --- ---
  --- ---
--

----- ------- - --------------

------------- - --
----------------- -- ---- --- --- ---

这个 deepCopy 函数会检查传入的值是否为一个数组。如果是,则递归地调用它自己,直到找到一个不是一个数组的值,然后将该值复制到新数组中。

结论

在 JavaScript 中,多维数组的深层拷贝可以使用递归函数和深拷贝技术来

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/29588

纠错
反馈