29

我想将源数组的所有单个元素推送到目标数组上,

target.push(source);

仅将源的引用放在目标列表中。

相反,我想做:

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

javascript中有没有一种方法可以更优雅地做到这一点,而无需显式编码重复循环?

当我这样做时,正确的术语是什么?我不认为“平推”是正确的。谷歌搜索没有产生任何结果,因为源和目标都是数组。

4

4 回答 4

57

apply做你想做的事:

var target = [1,2];
var source = [3,4,5];

target.push.apply(target, source);

alert(target); // 1, 2, 3, 4, 5

MDC - 申请

使用给定的 this 值和作为 数组提供的参数调用函数。

于 2010-10-24T09:56:55.243 回答
24

您可以使用concat方法:

var num1 = [1, 2, 3];  
var num2 = [4, 5, 6];  
var num3 = [7, 8, 9];  

// creates array [1, 2, 3, 4, 5, 6, 7, 8, 9]; num1, num2, num3 are unchanged  
var nums = num1.concat(num2, num3);
于 2010-10-24T09:53:16.617 回答
19

更简单的方法来做到这一点。

   var arr1 = [1,2,3] 
   var arr2 = [4,5,6] 
   arr1.push(...arr2) //arr1 now contains [1,2,3,4,5,6]
于 2020-02-11T06:34:35.433 回答
7

您可以简单地使用扩展语法

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
    // [0, 1, 2, 3, 4, 5]

或者:

var arr1 = ['a', 'b', 'c'];
var arr2 = [1, 2, 3, ...arr1];
        // [1, 2, 3, 'a', 'b', 'c']

演示:

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
console.log(arr1);

于 2018-01-15T11:33:06.303 回答