我有一个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 arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayB.reduce((pre, cur) => [...pre, ...cur], arrayA);
console.log(newArray)

其他回答

关于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]

下面的函数没有数组长度的问题,并且比所有建议的解决方案执行得更好:

function pushArray(list, other) {
    var len = other.length;
    var start = list.length;
    list.length = start + len;
    for (var i = 0; i < len; i++ , start++) {
        list[start] = other[i];
    }
}

不幸的是,jspref拒绝接受我的提交,所以这里是使用benchmark.js的结果

        Name            |   ops/sec   |  ± %  | runs sampled
for loop and push       |      177506 |  0.92 | 63
Push Apply              |      234280 |  0.77 | 66
spread operator         |      259725 |  0.40 | 67
set length and for loop |      284223 |  0.41 | 66

在哪里

For循环和push是:

    for (var i = 0, l = source.length; i < l; i++) {
        target.push(source[i]);
    }

推动应用:

target.push.apply(target, source);

接线员:传播

    target.push(...source);

最后,“set length And for loop”是上面的函数

使用concat函数,如下所示:

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

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

这是ES6的方式

var newArray = []; 数据1 = [1,2,3,4] 请注意数据2 = [5,6,7,8] 纽瓦雷= [..]dataArray1, ... dataArray2] console . log (newArray)

上面的方法适用于大多数情况,在不适用的情况下请考虑concat,比如数组中有数十万项。

数据1 = [1,2,3,4] 请注意数据2 = [5,6,7,8] 让纽瓦雷= dataArray1.concat(dataArray2); console . log (newArray)

以下对我来说似乎是最简单的:

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

由于“push”的参数数量是可变的,所以可以使用push函数的apply方法来推送另一个数组的所有元素。它的结构 调用push,使用它的第一个参数(这里是"newArray")作为"this"和 数组的元素作为剩余的参数。

第一个语句中的切片获得第一个数组的副本,因此不需要修改它。

如果你正在使用一个可用slice的javascript版本,你可以将push表达式简化为:

newArray.push(...dataArray2)