添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在 ES5 中,我们使用 concat 方法来复制数组。此外,一些开发人员使用 slice() 方法,通过传递 0 作为参数来对引用数组的所有元素进行切片并创建一个新数组。

用户可以按照下面的示例使用 slice() 方法克隆数组。我们创建了 array1,其中包含不同数据类型的值。之后,我们使用 slice() 方法复制 array1 并将其存储在“clone”变量中。

<h2>Using the <i>slice()</i> method to clone the array in JavaScript</h2> <div id = "output"> </div> <script> let output = document.getElementById('output'); let array1 = [10, "hello", 30, true]; output.innerHTML += "The original array: " + array1 + " <br>"; let clone = array1.slice(0); output.innerHTML += "The cloned array: " + clone + " <br>"; </script> </body> </html>
登录后复制

用户已经了解了我们如何在 ES5 中克隆数组。

此外,用户可以考虑复制数组,就像使用赋值运算符复制字符串、数字和布尔值等普通变量一样。

用户在使用赋值运算符复制数组时可能会遇到问题。让我们通过下面的例子来理解它。

使用赋值运算符复制数组

在下面的示例中,字符串数组包含各种字符串。我们已将 strings 数组分配给 strings2 数组。之后,我们将新的字符串值推送到 strings2 数组中。

<h2>Using the <i>assignment</i> operator to clone the array in JavaScript</h2> <div id = "output"> </div> <script> let output = document.getElementById('output'); let array1 = ["Hi", " users", "Welcome"]; let array2 = array1; array2.push("New value"); output.innerHTML += "The value of array2: " + array2 + " <br>"; output.innerHTML += "The value of array1: " + array1 + " <br>"; </script> </body> </html>
登录后复制

在上面的输出中,用户可以观察到,当我们将字符串值推送到 strings2 数组时,它也推送到 strings 数组。为什么会发生这种情况?

在这里,可变和不可变对象的概念发挥了作用。

可变对象与不可变对象

在 JavaScript 中,数组和对象是可变的,这意味着我们可以在创建它们后初始化它们后更改它们的值。因此,上例中不存在 strings2 数组。当我们将 strings 数组分配给 strings2 数组时,它会生成对 strings 数组的引用。因此,每当我们更改 strings2 数组时,它也会更改 strings 数组。

因此,我们需要创建数组的实际副本,而不引用其他数组

现在,让我们学习如何在 ES6 中克隆数组。

在 ES6 中使用扩展运算符 (...) 克隆数组

展开运算符的语法是三个点 (...)。我们可以用它来像数组一样传播可迭代对象。扩展运算符创建数组或对象的新副本。

用户可以按照以下语法使用扩展运算符复制数组。

let booleansCopy = [...booleans];
登录后复制

在下面的示例中,我们创建了布尔数组,其中包含不同的布尔值。之后,我们使用扩展运算符创建了布尔数组的副本,并将该副本分配给 booleanCopy 变量。

在输出中,用户可以观察到 booleanCopy 数组包含与 boolean 数组包含的值相同的值。

<h2>Using the <i> spread operator </i> to clone the array in JavaScript</h2> <div id = "output"> </div> <script> let output = document.getElementById('output'); let booleans = [true, false, false, true, true]; let booleansCopy = [...booleans]; output.innerHTML += "The values of the booleansCopy array: " + booleansCopy + "<br>"; </script> </body> </html>
登录后复制

在下面的示例中,尺寸数组包含不同的数值。我们使用展开运算符创建了 size 数组的副本,并使用赋值运算符将该数组存储在sizedClone 变量中。

之后,我们将 60 推入 sizeClone 数组。

<h2>Using the <i>spread</i> operator to clone the array in JavaScript</h2> <div id = "output"> </div> <script> let output = document.getElementById('output'); let sizes = [34, 43, 45, 47, 49, 50]; output.innerHTML += "-------Before Push-------" + "<br>"; output.innerHTML += "The values of the sizes array: " + sizes + "<br>"; let sizesClone = [...sizes]; output.innerHTML += "The values of the sizesClone array: " + sizesClone + "<br>"; sizesClone.push(60); output.innerHTML += "------After Push------" + "<br>"; output.innerHTML += "The values of the sizes array: " + sizes + "<br>"; output.innerHTML += "The values of the sizesClone array:" + sizesClone + "<br>"; </script> </body> </html>
登录后复制

在上面的输出中,用户可以观察到 60 反映在 sizesClone 数组 中,但没有反映在 Sizes 数组中,因为我们创建了数组的实际副本,而不是像示例 2 中那样引用数组.

现在,用户清楚地明白为什么在 ES6 中不使用赋值运算符以及为什么使用 扩展运算符 来克隆数组。

以上就是如何在 ES6 中克隆数组?的详细内容,更多请关注php中文网其它相关文章!

PHP数组从URL参数中获取的行为不如预期 我有一个包含类别ID的URL参数,我想将其视为一个数组,如下所示:http://example.com?cat[]=3,9,13在PHP中,我使用它从URL参数获取数组:$catI... P粉785905797来自于2024-04-06 22:09:02