将数组项复制到另一个数组中

我有一个JavaScript数组dataArray,我想把它推入一个新的数组newArray。只是我不希望newArray[0]dataArray。我想把所有的项目都推入新的数组中。

var newArray = [];

newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...

甚至更好。

var newArray = new Array (
   dataArray1.values(),
   dataArray2.values(),
   // ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);

所以现在新的数组包含了各个数据数组的所有值。 有没有一些类似于pushValues'的速记方法,这样我就不必在每个单独的dataArray'上进行迭代,一个一个地添加项目?

解决办法

使用concat函数,像这样。

var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);

newArray的值将是[1, 2, 3, 4]arrayAarrayB保持不变;concat为结果创建并返回一个新数组)。

评论(10)

只要你的数组不是很大(见下面的注意事项),你可以使用你想追加值的数组的push()方法。push()可以接受多个参数,所以你可以使用它的apply()方法,把要推送的数组作为一个函数参数的列表来传递。与使用concat()相比,这样做的好处是在原地向数组添加元素,而不是创建一个新的数组。

然而,对于大型数组(100,000个成员或更多),**这一招似乎会失败。对于这样的数组,使用一个循环是一个更好的方法。详见https://stackoverflow.com/a/17368101/96100。

var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);

你可能想把它概括成一个函数。

function pushArray(arr, arr2) {
    arr.push.apply(arr, arr2);
}

...或者将其添加到Array'的原型中。

Array.prototype.pushArray = function(arr) {
    this.push.apply(this, arr);
};

var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);

...或者模仿原来的push()方法,利用concat()push()一样,允许多参数的事实,允许多参数。

Array.prototype.pushArray = function() {
    this.push.apply(this, this.concat.apply([], arguments));
};

var newArray = [];
newArray.pushArray(dataArray1, dataArray2);

这里是上一个例子的基于循环的版本,适合大数组和所有主要浏览器,包括IE

评论(8)
var a=new Array('a','b','c');
var b=new Array('d','e','f');
var d=new Array('x','y','z');
var c=a.concat(b,d)

这能解决你的问题吗?

评论(0)