我有一个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这样的速记可用,这样我就不必遍历每个单独的数据数组,逐个添加项?
以下对我来说似乎是最简单的:
var newArray = dataArray1.slice();
newArray.push.apply(newArray, dataArray2);
由于“push”的参数数量是可变的,所以可以使用push函数的apply方法来推送另一个数组的所有元素。它的结构
调用push,使用它的第一个参数(这里是"newArray")作为"this"和
数组的元素作为剩余的参数。
第一个语句中的切片获得第一个数组的副本,因此不需要修改它。
如果你正在使用一个可用slice的javascript版本,你可以将push表达式简化为:
newArray.push(...dataArray2)
以下对我来说似乎是最简单的:
var newArray = dataArray1.slice();
newArray.push.apply(newArray, dataArray2);
由于“push”的参数数量是可变的,所以可以使用push函数的apply方法来推送另一个数组的所有元素。它的结构
调用push,使用它的第一个参数(这里是"newArray")作为"this"和
数组的元素作为剩余的参数。
第一个语句中的切片获得第一个数组的副本,因此不需要修改它。
如果你正在使用一个可用slice的javascript版本,你可以将push表达式简化为:
newArray.push(...dataArray2)
关于array。prototype。push。apply有很多答案。这里有一个明显的例子:
数据1 = [1,2];
变量dataArray2 = [3,4,5];
var newArray = [];
阵列原型推送。apply (newArray, dataArray1);// newArray = [1,2]
阵列原型推送。apply (newArray, dataArray2);// newArray = [1,2,3,4,5]
console . log (JSON stringify (newArray));//输出:[1、2、3、4、5]
如果你有ES6语法:
数据1 = [1,2];
变量dataArray2 = [3,4,5];
var newArray = [];
newArray。push (... dataArray1);// newArray = [1,2]
newArray。push (... dataArray2);// newArray = [1,2,3,4,5]
console . log (JSON stringify (newArray));//输出:[1、2、3、4、5]
在ECMAScript 6中,你可以使用Spread语法:
设arr1 = [0,1,2];
Let arr2 = [3,4,5];
arr1.push(…arr2);
console.log (arr1)
扩展语法在所有主流浏览器(不包括IE11)中都可用。关于当前的兼容性,请参见这个(不断更新的)兼容性表。
但是,请参阅下面杰克·吉芬的回复,了解更多关于性能的评论。似乎concat仍然比spread算子更好更快。