首页 >web前端 >js教程 >如何在 ES6 中克隆数组?

如何在 ES6 中克隆数组?

王林
王林转载
2023-09-12 08:09:031458浏览

如何在 ES6 中克隆数组?

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

示例

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

<html>
<body>
   <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 数组中。

示例

<html>
<body>
   <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 数组包含的值相同的值。

<html>
<body>
   <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 数组。

<html>
<body>
   <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中文网其他相关文章!

声明:
本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除