Javascript 在一行中复制数组

Javascript 在一行中复制数组,javascript,arrays,Javascript,Arrays,我想创建一个数组,一个现有数组的副本,但不是它的实例。我怎么能在一行中做到这一点 array1 = new Array('orange', 'red', 'blue', 'green'); array2 = new Array.apply(this, array1); // Uncaught TypeError: function apply() is not a constructor 就是你要找的方法。在定义数组时,您可能还希望使用文字 现在有 array1.join() === ar

我想创建一个数组,一个现有数组的副本,但不是它的实例。我怎么能在一行中做到这一点

array1 = new Array('orange', 'red', 'blue', 'green');
array2 = new Array.apply(this, array1);

// Uncaught TypeError: function apply() is not a constructor 
就是你要找的方法。在定义数组时,您可能还希望使用文字

现在有

array1.join() === array2.join(); // true
array1 === array2; // false
就是你要找的方法。在定义数组时,您可能还希望使用文字

现在有

array1.join() === array2.join(); // true
array1 === array2; // false

省略
new
以使
apply
工作(否则它将被解释为
new(Array.apply)(…)
)。由于
数组
构造函数不需要
新的
,也可以作为函数调用,因此它将非常简单:

array1 = new Array('orange', 'red', 'blue', 'green');
array2 = Array.apply(this, array1);
相关问题:

但是,您根本不需要使用数组构造函数,特别是因为它不能很好地处理单数值元素数组。更好:

var array1 = ['orange', 'red', 'blue', 'green'];
var array2 = array1.slice();

省略
new
以使
apply
工作(否则它将被解释为
new(Array.apply)(…)
)。由于
数组
构造函数不需要
新的
,也可以作为函数调用,因此它将非常简单:

array1 = new Array('orange', 'red', 'blue', 'green');
array2 = Array.apply(this, array1);
相关问题:

但是,您根本不需要使用数组构造函数,特别是因为它不能很好地处理单数值元素数组。更好:

var array1 = ['orange', 'red', 'blue', 'green'];
var array2 = array1.slice();
返回一个新数组,该数组包含从参数中给定的索引开始的源数组中的所有项,在本例中该索引为零,因此整个数组都为零

请注意,如果任何数组项本身是对象(例如多维数组),则新数组仍将指向这些数组的同一实例:

array1 = [1,[2,3]];
array2 = array1.slice(0);
array2[0] = 4;
array2[1][0] = 5;

// array1 is now [1,[5,3]]!
返回一个新数组,该数组包含从参数中给定的索引开始的源数组中的所有项,在本例中该索引为零,因此整个数组都为零

请注意,如果任何数组项本身是对象(例如多维数组),则新数组仍将指向这些数组的同一实例:

array1 = [1,[2,3]];
array2 = array1.slice(0);
array2[0] = 4;
array2[1][0] = 5;

// array1 is now [1,[5,3]]!
根据,您只需要执行一个数组切片

var array2 = array1.slice(0);
这篇文章还涉及深度克隆。

根据,您只需要执行一个数组切片

var array2 = array1.slice(0);

这篇文章还涉及深度克隆。

使用
array.slice

var copy = original.slice(0);

有关使用
array.slice的详细信息

var copy = original.slice(0);

更多关于“现有数组的副本而不是他的实例”的信息,这意味着什么?请使用您的标题显示您试图解决的问题。这与论坛中的主题行不同。标题应该是可搜索的。没有人会搜索“我怎么做?”在您的情况下,您希望将现有阵列复制到新阵列。这是什么新阵列。应用
@Derek朕會功夫: 这是他需要解决的问题…“一个存在数组的副本,但不是他的实例”这意味着什么?请用你的标题来说明你试图解决的问题。这与论坛中的主题行不同。标题应该是可搜索的。没有人会搜索“我怎么做?”在您的情况下,您希望将现有阵列复制到新阵列。这是什么新阵列。应用@Derek朕會功夫: 这是他需要解决的问题…+1至少包括在大多数副本中找不到的有用信息。+1至少包括在大多数副本中找不到的有用信息。