将JavaScript中的数组复制到另一个数组时:
var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); //Now, arr1 = ['a','b','c','d']
我意识到arr2
引用了与arr1
相同的数组,而不是一个新的、独立的数组。如何复制数组以获得两个独立的数组?
发布于 2015-07-03 22:46:54
您可以使用数组跨页...
来复制数组。
const itemsCopy = [...items];
另外,如果想要创建一个新的数组,现有的数组是它的一部分:
var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];
数组排列现在是supported in all major browsers的,但是如果你需要更早的支持,可以使用typescript或babel并编译成ES5。
发布于 2012-10-18 08:11:09
slice
的另一种选择是concat
,它有两种使用方式。其中第一个可能更具可读性,因为预期的行为非常清楚:
var array2 = [].concat(array1);
第二种方法是:
var array2 = array1.concat();
科恩(在评论中)指出,后一种方法是has better performance。
其工作方式是,concat
方法创建一个新数组,该数组由调用它的对象中的元素组成,后面是作为参数传递给它的任何数组的元素。因此,当没有参数被传递时,它只是简单地复制数组。
Lee Penkman也在评论中指出,如果array1
有可能为undefined
,您可以返回一个空数组,如下所示:
var array2 = [].concat(array1 || []);
或者,对于第二种方法:
var array2 = (array1 || []).concat();
请注意,您也可以使用slice
:var array2 = (array1 || []).slice();
来执行此操作。
发布于 2014-04-23 21:32:36
这是我在尝试了许多方法后所做的:
var newArray = JSON.parse(JSON.stringify(orgArray));
这将创建一个与第一个不相关的新的深拷贝(不是浅拷贝)。
此外,这显然不会克隆事件和函数,但好的一面是您可以在一行中完成它,并且它可以用于任何类型的对象(数组、字符串、数字、对象...)
https://stackoverflow.com/questions/7486085
复制相似问题