在一行中复制数组

时间:2014-04-10 15:57:06

标签: javascript arrays

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

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

// Uncaught TypeError: function apply() is not a constructor 

5 个答案:

答案 0 :(得分:3)

Array.prototype.slice是您正在寻找的方法。在定义数组时,您可能还想使用文字

var array1, array2;

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

现在有

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

答案 1 :(得分:2)

忽略new使apply有效(否则会被解释为new (Array.apply)(…))。由于Array构造函数不需要new并且也可以作为函数调用,因此它将如下所示:

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

相关问题:Use of .apply() with 'new' operator. Is this possible?

但是,您根本不需要使用Array构造函数,尤其是因为它不适用于单数字元素数组。更好:

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

答案 2 :(得分:1)

array2 = array1.slice(0);

返回一个新数组,其中包含源数组中从参数中给出的索引开始的所有项,在本例中为零,因此整个数组都是。

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

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

// array1 is now [1,[5,3]]!

答案 3 :(得分:0)

根据this article,你只需要做一个数组切片。

var array2 = array1.slice(0);

该文章还涉及深度克隆。

答案 4 :(得分:0)

使用array.slice

var copy = original.slice(0);

更多关于array.slice

相关问题