JS中复制一个数组有两种方法:浅复制和深复制。
浅复制
浅复制只是复制了数组中的元素的引用,而不是复制元素本身。这意味着,如果原始数组中的元素被改变,则副本中的相应元素也会被改变。下面是复制数组的两条方法:
1.使用slice()
slice() 方法返回一个新的数组,这个新数组是通过把原始数组从开始到结束的位置上的所有元素复制到一个新的数组中来创建的。如果是一个简单的数组(没有嵌套的对象),那么这种方法非常有效。
let arr1 = [1, 2, 3, 4, 5];
let arr2 = arr1.slice();
console.log(arr2); // [1, 2, 3, 4, 5]
2.使用展开运算符
展开运算符(spread operator)可以将数组展开为单独的参数,并将它们传递给另一个函数或数组。这种方法最适合于简单的数组。
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [...arr1];
console.log(arr2); // [1, 2, 3, 4, 5]
深复制
深复制是复制数组中的元素本身,而不是只复制元素的引用。这意味着,如果原始数组中的元素被更改,那么副本数组中的相应元素不会被更改。下面是问复制多维数组或包含嵌套对象的数组的两个方法:
1.使用JSON.parse()和JSON.stringify()
可以使用JSON.parse()和JSON.stringify()方法深度复制一个数组,但是,它有一些限制。首先,数组中不能有任何函数、undefined、Infinity、NaN和日期。其次,如果原始数组中有循环引用(即一个对象引用另一个对象),这种方法将无法复制它们。
let arr1 = [[1, 2], [3, 4], [5, 6]];
let arr2 = JSON.parse(JSON.stringify(arr1));
console.log(arr2); // [[1, 2], [3, 4], [5, 6]]
2.使用递归
使用递归,可以深度复制一个多维数组,包括嵌套对象。在这里,我们递归地遍历两个数组中的每个元素并将其复制到新数组中。
function copyArray(arr) {
let copy = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
copy[i] = copyArray(arr[i]);
} else if (typeof arr[i] === 'object') {
copy[i] = copyObject(arr[i]);
} else {
copy[i] = arr[i];
}
}
return copy;
}
let arr1 = [[1, 2], [3, 4], [5, 6]];
let arr2 = copyArray(arr1);
console.log(arr2); // [[1, 2], [3, 4], [5, 6]]
以上就是JS中复制一个数组的浅复制和深复制的攻略,希望这能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中如何复制一个数组(浅复制、深复制) - Python技术站