我有一个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'上进行迭代,一个一个地添加项目?
只要你的数组不是很大(见下面的注意事项),你可以使用你想追加值的数组的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。
Array.prototype.pushArray = function() {
var toPush = this.concat.apply([], arguments);
for (var i = 0, len = toPush.length; i < len; ++i) {
this.push(toPush[i]);
}
};