首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按值复制数组

按值复制数组
EN

Stack Overflow用户
提问于 2011-09-20 21:38:09
回答 27查看 1.1M关注 0票数 2K

将JavaScript中的数组复制到另一个数组时:

代码语言:javascript
复制
var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d');  //Now, arr1 = ['a','b','c','d']

我意识到arr2引用了与arr1相同的数组,而不是一个新的、独立的数组。如何复制数组以获得两个独立的数组?

EN

回答 27

Stack Overflow用户

发布于 2015-07-03 22:46:54

您可以使用数组跨页...来复制数组。

const itemsCopy = [...items];

另外,如果想要创建一个新的数组,现有的数组是它的一部分:

代码语言:javascript
复制
var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];

数组排列现在是supported in all major browsers的,但是如果你需要更早的支持,可以使用typescript或babel并编译成ES5。

More info on spreads

票数 207
EN

Stack Overflow用户

发布于 2012-10-18 08:11:09

slice的另一种选择是concat,它有两种使用方式。其中第一个可能更具可读性,因为预期的行为非常清楚:

代码语言:javascript
复制
var array2 = [].concat(array1);

第二种方法是:

代码语言:javascript
复制
var array2 = array1.concat();

科恩(在评论中)指出,后一种方法是has better performance

其工作方式是,concat方法创建一个新数组,该数组由调用它的对象中的元素组成,后面是作为参数传递给它的任何数组的元素。因此,当没有参数被传递时,它只是简单地复制数组。

Lee Penkman也在评论中指出,如果array1有可能为undefined,您可以返回一个空数组,如下所示:

代码语言:javascript
复制
var array2 = [].concat(array1 || []);

或者,对于第二种方法:

代码语言:javascript
复制
var array2 = (array1 || []).concat();

请注意,您也可以使用slicevar array2 = (array1 || []).slice();来执行此操作。

票数 75
EN

Stack Overflow用户

发布于 2014-04-23 21:32:36

这是我在尝试了许多方法后所做的:

代码语言:javascript
复制
var newArray = JSON.parse(JSON.stringify(orgArray));

这将创建一个与第一个不相关的新的深拷贝(不是浅拷贝)。

此外,这显然不会克隆事件和函数,但好的一面是您可以在一行中完成它,并且它可以用于任何类型的对象(数组、字符串、数字、对象...)

票数 74
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7486085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档