📅  最后修改于: 2023-12-03 15:31:41.198000             🧑  作者: Mango
在 JavaScript 中,如果直接赋值一个对象数组变量给另一个变量,那么这两个变量指向同一个数组,当其中一个变量修改数组时,另外一个变量所指向的数组也会被修改。这种引用类型变量的赋值方式在某些情况下是不可取的,因为我们需要操作的是两个不同的数组变量。
为了解决这个问题,我们可以使用克隆(clone)对象数组的方法来创建一个新的数组,使得这个新的数组和原数组相互独立,修改一个不会影响另一个 。
以下是几种 JavaScript 克隆对象数组的方法。
使用 slice() 方法可以复制数组的一部分,从而实现克隆数组的目的。slice() 方法可以接受两个参数,第一个参数是需要复制的起始位置,第二个参数是截止位置。如果不传递参数,则会复制整个数组。
let arr1 = [{ name: "张三" }, { name: "李四" }, { name: "王五" }];
let arr2 = arr1.slice();
console.log(arr2); // [{ name: "张三" }, { name: "李四" }, { name: "王五" }]
concat() 方法可以将两个或多个数组合并成一个新数组,从而实现克隆数组的目的。这个方法不会修改原数组,而是返回一个新的数组。
let arr1 = [{ name: "张三" }, { name: "李四" }, { name: "王五" }];
let arr2 = arr1.concat();
console.log(arr2); // [{ name: "张三" }, { name: "李四" }, { name: "王五" }]
使用 JSON.parse() 和 JSON.stringify() 方法可以将对象数组转换为字符串再转换为对象数组,从而实现克隆数组的目的。这种方法适用于所有类型的对象,但是不适用于包含函数、RegExp、Date 等特殊对象的数组。
let arr1 = [{ name: "张三" }, { name: "李四" }, { name: "王五" }];
let arr2 = JSON.parse(JSON.stringify(arr1));
console.log(arr2); // [{ name: "张三" }, { name: "李四" }, { name: "王五" }]
以上是三种 JavaScript 克隆对象数组的方法,根据不同的需求可以选择不同的方法来实现克隆。