在 JavaScript 中,当我们复制数组时,有时候我们需要创建一个新的数组,该新数组只包含原始数组中的值,而不是引用原始数组中的值。这尤其适用于多维数组。
多维数组
多维数组是由多个一维数组组成的数组。每个一维数组称为该多维数组的子数组,并且可以通过使用多个索引来访问它们。例如,以下是一个二维数组:
const arr = [ [1, 2], [3, 4], ];
复制数组
在 JavaScript 中,有两种方法可以复制数组:浅拷贝和深拷贝。浅拷贝只复制原始数组的引用,而不是值,这意味着如果我们更改新数组中的值,则会更改原始数组中的值。深拷贝会创建一个新的数组,并将原始数组中的所有值复制到新数组中。
浅拷贝
要将数组浅拷贝到新变量中,请使用以下语法:
const arr = [1, 2, 3]; const copyArr = arr;
这将创建一个名为 copyArr
的新变量,并将 arr
的引用分配给它。现在,如果我们更改 copyArr
中的任何值,arr
中的相应值也会更改:
copyArr[0] = 4; console.log(arr); // [4, 2, 3]
深拷贝
要将数组深拷贝到新变量中,我们可以使用 Array.from()
或扩展运算符(...
)来复制原始数组中的值。
以下是使用 Array.from()
来创建一个新数组的示例:
const arr = [1, 2, 3]; const copyArr = Array.from(arr);
这会创建一个名为 copyArr
的新数组,并将原始数组 arr
中的所有值复制到其中。如果我们更改 copyArr
中的值,则不会影响原始数组 arr
中的相应值:
copyArr[0] = 4; console.log(arr); // [1, 2, 3]
另一种深拷贝数组的方法是使用扩展运算符(...
):
const arr = [1, 2, 3]; const copyArr = [...arr];
这也会创建一个名为 copyArr
的新数组,并将原始数组 arr
中的所有值复制到其中。如果我们更改 copyArr
中的值,则不会影响原始数组 arr
中的相应值:
copyArr[0] = 4; console.log(arr); // [1, 2, 3]
多维数组的副本
要创建多维数组的副本而不是引用,请使用递归函数和深拷贝技术来复制每个子数组。
以下是使用递归函数和 Array.from()
来创建一个二维数组的副本的示例:
-- -------------------- ---- ------- -------- ------------- - ------ --------------- ----- -- ------------------ - ------------- - ----- - ----- --- - - --- --- --- --- -- ----- ------- - -------------- ------------- - -- ----------------- -- ---- --- --- ---
这个 deepCopy
函数会检查传入的值是否为一个数组。如果是,则递归地调用它自己,直到找到一个不是一个数组的值,然后将该值复制到新数组中。
结论
在 JavaScript 中,多维数组的深层拷贝可以使用递归函数和深拷贝技术来
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/29588